接上一篇文章:

http://www.cnblogs.com/xiaoit/p/4430387.html

 

有时候会出现某字段建立一个索引,但是查看执行计划的时候发现还是全扫了表?

可以强制走下索引看看扫描了多少数据量:

EXPLAIN SELECT * FROM tab_index force index(idx2) WHERE age = 32;

然后比较 此次需要扫描的记录数与之前全表扫描的记录数,看百分比是多少???

如果走索引扫描的数据很多的话,可能优化器会认为效率没有全扫快。索引就没有走索引。
手册上提到一个比例:每个表的索引被查询,并且使用最好的索引,除非优化器认为使用表扫描更有效。是否使用扫描取决于是否最好的索引跨越超过30%的表。
优化器更加复杂,其估计基于其它因素,例如表大小、行数和I/O块大小,因此固定比例不再决定选择使用索引还是扫描。

 

可以参考下手册:

http://dev.mysql.com/doc/refman/5.1/en/optimization.html

相关文章:

  • 2022-12-23
  • 2022-02-19
  • 2022-12-23
  • 2022-12-23
  • 2021-07-29
猜你喜欢
  • 2021-09-15
  • 2021-07-11
  • 2021-07-26
  • 2021-12-06
  • 2022-02-23
  • 2022-12-23
相关资源
相似解决方案