MySQL學習筆記:索引失效

surpass發表於2020-09-22

EXPLAIN中的type為range,而且rows過大時:

MySQL學習筆記:索引失效

  • 查詢臨界值示例:

MySQL學習筆記:索引失效

一般情況:

以下參考:索引失效的情況(很棒的一篇文章,不過有些不準確,比如:使用 >= 不會失效,此處做個總結記錄)

WHERE子句中

  • 未遵循最左原則
  • 在索引列上計算,使用函式
  • 在索引列上自動(如:`phone`=18172874277,`phone`是字串型,所以等號後面的值應加引號),手動轉換型別
  • 某列使用'>','<',右側的索引列(按照組合索引欄位順序)
  • LIKE以萬用字元開頭
  • 組合索引列之間使用OR

GROUP BY,ORDER BY子句中(索引走的,不過下面這種情況會降低效率)

  • 若不符合最左原則,或者含有非索引列,或者索引列使用了函式,則:
    • ORDER BY將使用額外的檔案排序
    • GROUP BY將使用額外的檔案排序,以及產生臨時表

注意:

  • 使用IN時,只有一個值時,相當於'=',有多個值時,索引也是有效的

MySQL學習筆記:索引失效

  • 索引列各自使用OR時,相當於IN

MySQL學習筆記:索引失效

  • LIKE以萬用字元結尾時,索引有效

MySQL學習筆記:索引失效

  • 使用'<=',索引有效

MySQL學習筆記:索引失效

  • 上述情況,EXPLAIN中的type為range,在rows過大時,索引均會失效。
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章