MySQL不必要的索引

时间:2012-08-16 20:57:09

标签: mysql

如果我有这个索引:

(col1,col2,col3)

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

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

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

(col1,col2,col3)

(col1,col2)

(COL1)

phpMyAdmin根本不会警告我。

所以我的问题是,是最后两个必要的索引吗?我认为只有第一个索引足够

谢谢。

1 个答案:

答案 0 :(得分:3)

MySQL只会使用一个索引(最左边)来优化搜索。引自文档:

If the table has a multiple-column index, any leftmost prefix of the index can be used by the optimizer to find rows. For example, if you have a three-column index on (col1, col2, col3), you have indexed search capabilities on (col1), (col1, col2), and (col1, col2, col3).

但是,如果任何索引都是独一无二的,那么他们可能有充分的理由去那里。

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

E.g。

ALTER TABLE tablename ADD INDEX (col1), ADD INDEX (col2), ADD INDEX (col3);