当我在MySQL中手动创建表时,我为每个字段添加一个索引,我认为我将用于查询。
当我使用phpMyAdmin为我创建表时,我在create-table表单中选择索引时,我看到phpMyAdmin将我的索引合并为1(加上我的主要索引)。
有什么区别?这个比那个好吗?在哪种情况下?
谢谢!
答案 0 :(得分:13)
两者都不是一个特别好的策略,但如果我不得不选择我会选择多个单一索引。
原因是只有在索引的任何完整前缀中使用所有字段时才能使用索引。如果您有一个索引(a,b,c,d,e,f),那么这适用于在a
上过滤的查询或在a
和{{1}上过滤的查询但是,对于仅在b
上进行查询过滤,它将毫无用处。
没有简单的规则总能用于选择最佳索引。您需要查看正在进行的查询类型,并选择可加快这些特定查询的索引。如果仔细考虑列的顺序,可以找到少量对多个不同查询有用的索引。例如,如果在一个查询中您同时对c
和a
进行过滤,而另一个查询仅过滤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