MySQL 联合索引测试3

接上一篇文章:

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。