在Mysql中,为什么未使用的索引会影响查询计划?

时间:2014-07-14 18:10:42

标签: mysql

我已经多次看过这个,但我可能误解了EXPLAIN查询计划。

假设我有一个表(col1,col2)。 我想在col1和col2上加入另一个表。 所以我创建了一个索引(col1,col2)。 有时,EXPLAIN显示索引未被使用。也许使用其他一些效率低下的指数,或者根本不使用。

但如果我创建另一个索引(col1),则使用第一个索引(col1,col2)。

有没有人曾经遇到过这种情况?你知道为什么会这样吗?

我的理论是,未使用的索引提供了一些关于表的更准确的统计信息,这些统计信息提示查询计划使用第一个索引。但是我对mysql的内部工作方式不太熟悉,知道这是真的还是如何证明它。

1 个答案:

答案 0 :(得分:2)

ALTER TABLE states的MySQL文档,可能需要在其上运行ANALYZE TABLE来刷新索引基数,我认为这是您行为的一个因素&# 39;重看。此外,查询优化器通常处理与填充表完全不同的空(或近)空表,并且它通常执行全表扫描,而不是在只有几行时使用索引。对于我自己在$work的开发,​​我不能依赖我的开发数据库的EXPLAIN输出。