1

如果我有这个索引:

(col1, col2, col3)

我知道当我搜索 (col1) 时它会有所帮助;(col1, col2); (col1, col2, col3)。

如果我使用完全相同的列创建另一个索引,phpMyAdmin 会警告我可能会删除其中一个索引,因为它们是相同的。

但是,如果我有这些索引:

(col1, col2, col3)

(col1, col2)

(col1)

phpMyAdmin 根本不会警告我。

所以我的问题是,最后两个索引在任何情况下都是必要的吗?我认为只有第一个索引就足够了

谢谢你。

4

1 回答 1

3

MySQL 将只使用一个索引(最左边的)来优化搜索。从文档中引用:

"如果表有一个多列索引,优化器可以使用索引的任何最左边的前缀来查找行。例如,如果您在 (col1, col2, col3) 上有一个三列索引,则您已建立索引(col1)、(col1, col2) 和 (col1, col2, col3) 的搜索功能。

但是,如果任何索引都是唯一的,那么它们可能有充分的理由存在。

如果在分析过程中您发现任何列经常彼此分开使用,那么您应该考虑为每个列添加单独的索引以优化这些查询。

例如

ALTER TABLE tablename ADD INDEX (col1), ADD INDEX (col2), ADD INDEX (col3);
于 2012-08-16T21:06:12.003 回答