2010-06-29 198 views
3

我有id, member_id, topic_id字段。有时我使用id,有时member_id,有时使用条款中的topic_id。我可以添加索引到它们全部吗?它会让它变慢吗?我是MYSQL优化的新手,所以谢谢。Mysql索引,我可以添加多少个?

回答

4

未使用的索引不会使SELECT速度变慢,但是您添加的每个索引都会减慢INSERT和UPDATE。

一个MyISAM表可以有索引的最大数量为64

+0

它会使INSERT和UPDATE慢很多还是只有一点点?正如我可以看到你很擅长php/mysql,请检查这个问题,如果你有时间:http://stackoverflow.com/questions/3138487/how-many-fields-is-normal-to-have-in-一张表 – 2010-06-29 08:08:53

+3

一般来说,除非您正在执行巨大的更新,否则不值得担心。对于大型插入,您可以临时删除索引并在之后重新构建它们 – 2010-06-29 08:14:09

+1

此外,您可以使用EXPLAIN找出给定查询是否使用了您期望的索引,并且还可以帮助您发现对新索引的需求 – 2010-06-29 08:15:25

2

在一般情况下,你想在每场单独的指数,如果你只在单一领域进行过滤你的查询,如下面的案例:

SELECT * FROM your_table WHERE id = ?; 
SELECT * FROM your_table WHERE member_id = ?; 
SELECT * FROM your_table WHERE topic_id = ?; 

如果id字段是主键,然后就是可能已经使用clustered index。因此,它看起来像你可能想尝试member_idtopic_id创建两个单独的non-clustered indexes

CREATE INDEX ix_your_table_member_id ON your_table (member_id); 
CREATE INDEX ix_your_table_topic_id ON your_table (topic_id); 

您还可能有兴趣在研究的covering indexes的话题。