【发布时间】:2011-03-22 21:48:23
【问题描述】:
当我在 MySQL 中手动创建表时,我会为我认为将用于查询的每个字段一次添加一个索引。
当我使用 phpMyAdmin 为我创建表并在 create-table 表单中选择我的索引时,我看到 phpMyAdmin 将我的索引合并为 1(加上我的主索引)。
有什么区别?这个比那个好吗?在什么情况下?
谢谢!
【问题讨论】:
当我在 MySQL 中手动创建表时,我会为我认为将用于查询的每个字段一次添加一个索引。
当我使用 phpMyAdmin 为我创建表并在 create-table 表单中选择我的索引时,我看到 phpMyAdmin 将我的索引合并为 1(加上我的主索引)。
有什么区别?这个比那个好吗?在什么情况下?
谢谢!
【问题讨论】:
这两者都不是一个特别好的策略,但如果我必须选择,我会选择多个单一索引。
原因是只有在使用索引的任何完整前缀中的所有字段时才能使用索引。如果您有一个索引(a、b、c、d、e、f),那么这适用于过滤a 的查询或同时过滤a 和b 的查询,但它会是仅对 c 的查询过滤无用。
没有一条简单的规则总是适用于选择最佳索引。您需要查看正在执行的查询类型并选择可以加快这些特定查询的索引。如果您仔细考虑列的顺序,您会发现少量索引对多个不同的查询很有用。例如,如果在一个查询中过滤a 和b,而另一个查询只过滤b,则两个查询都可以使用(b,a)上的索引,但索引(a, b) 不会。
【讨论】:
这实际上取决于您的查询。有些查询更好地利用了多列索引,有些则没有。 EXPLAIN 是你的朋友。
http://dev.mysql.com/doc/refman/5.6/en/explain.html
这里还有一个很好的资源:
http://dev.mysql.com/doc/refman/5.6/en/optimization-indexes.html
【讨论】: