接上一篇文章:
http://www.cnblogs.com/xiaoit/p/4430387.html
有時候會出現某欄位建立一個索引,但是檢視執行計劃的時候發現還是全掃了表?
可以強制走下索引看看掃描了多少資料量:
EXPLAIN SELECT * FROM tab_index force index(idx2) WHERE age = 32;
然後比較 此次需要掃描的記錄數與之前全表掃描的記錄數,看百分比是多少???
如果走索引掃描的資料很多的話,可能優化器會認為效率沒有全掃快。索引就沒有走索引。
手冊上提到一個比例:每個表的索引被查詢,並且使用最好的索引,除非優化器認為使用表掃描更有效。是否使用掃描取決於是否最好的索引跨越超過30%的表。
優化器更加複雜,其估計基於其它因素,例如表大小、行數和I/O塊大小,因此固定比例不再決定選擇使用索引還是掃描。
可以參考下手冊: