MySQL索引:拥有多个索引而不是一个多字段密钥?

时间:2010-07-29 18:40:54

标签: mysql database indexing

当我在MySQL中手动创建表时,我为每个字段添加一个索引,我认为我将用于查询。

当我使用phpMyAdmin为我创建表时,我在create-table表单中选择索引时,我看到phpMyAdmin将我的索引合并为1(加上我的主要索引)。

有什么区别?这个比那个好吗?在哪种情况下?

谢谢!

2 个答案:

答案 0 :(得分:13)

两者都不是一个特别好的策略,但如果我不得不选择我会选择多个单一索引。

原因是只有在索引的任何完整前缀中使用所有字段时才能使用索引。如果您有一个索引(a,b,c,d,e,f),那么这适用于在a上过滤的查询或在a和{{1}上过滤的查询但是,对于仅在b上进行查询过滤,它将毫无用处。

没有简单的规则总能用于选择最佳索引。您需要查看正在进行的查询类型,并选择可加快这些特定查询的索引。如果仔细考虑列的顺序,可以找到少量对多个不同查询有用的索引。例如,如果在一个查询中您同时对ca进行过滤,而另一个查询仅过滤b,那么(b,a)上的索引将可用于两个查询但索引a(a,b)不会。

答案 1 :(得分:8)

这实际上取决于您的查询。有些查询可以更好地使用多列索引,有些则不能。 EXPLAIN是你的朋友。

http://dev.mysql.com/doc/refman/5.6/en/explain.html

这里也是一个非常好的资源:

http://dev.mysql.com/doc/refman/5.6/en/optimization-indexes.html