我已经多次看过这个,但我可能误解了EXPLAIN查询计划。
假设我有一个表(col1,col2)。 我想在col1和col2上加入另一个表。 所以我创建了一个索引(col1,col2)。 有时,EXPLAIN显示索引未被使用。也许使用其他一些效率低下的指数,或者根本不使用。
但如果我创建另一个索引(col1),则使用第一个索引(col1,col2)。
有没有人曾经遇到过这种情况?你知道为什么会这样吗?
我的理论是,未使用的索引提供了一些关于表的更准确的统计信息,这些统计信息提示查询计划使用第一个索引。但是我对mysql的内部工作方式不太熟悉,知道这是真的还是如何证明它。
答案 0 :(得分:2)
ALTER TABLE
states的MySQL文档,可能需要在其上运行ANALYZE TABLE
来刷新索引基数,我认为这是您行为的一个因素&# 39;重看。此外,查询优化器通常处理与填充表完全不同的空(或近)空表,并且它通常执行全表扫描,而不是在只有几行时使用索引。对于我自己在$work
的开发,我不能依赖我的开发数据库的EXPLAIN
输出。