MySQL 聯合索引測試3

weixin_33831673發表於2015-04-15

接上一篇文章:

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

相關文章