EXPLAIN中的type為range,而且rows過大時:
- rows的意義和type的列舉值,可參見:EXPLAIN Output Format
- 查詢臨界值示例:
一般情況:
以下參考:索引失效的情況(很棒的一篇文章,不過有些不準確,比如:使用 >= 不會失效,此處做個總結記錄)
WHERE子句中
- 未遵循最左原則
- 在索引列上計算,使用函式
- 在索引列上自動(如:`phone`=18172874277,`phone`是字串型,所以等號後面的值應加引號),手動轉換型別
- 某列使用'>','<',右側的索引列(按照組合索引欄位順序)
- LIKE以萬用字元開頭
- 組合索引列之間使用OR
GROUP BY,ORDER BY子句中(索引走的,不過下面這種情況會降低效率)
- 若不符合最左原則,或者含有非索引列,或者索引列使用了函式,則:
- ORDER BY將使用額外的檔案排序
- GROUP BY將使用額外的檔案排序,以及產生臨時表
注意:
- 使用IN時,只有一個值時,相當於'=',有多個值時,索引也是有效的
- 索引列各自使用OR時,相當於IN
- LIKE以萬用字元結尾時,索引有效
- 使用'<=',索引有效
- 上述情況,EXPLAIN中的type為range,在rows過大時,索引均會失效。
本作品採用《CC 協議》,轉載必須註明作者和本文連結