索引失效的情況有哪些?
阿新 • • 發佈:2021-07-10
- 如果索引列出現了隱式型別轉換,則MySQL不會使用索引。常見的情況是在SQL的where條件中欄位型別為字串,其值為數值,如果沒有加引號那麼MySQL不會使用索引。
- 如果where條件中含有or,除非or前使用了索引列而or之後是非索引列,索引會失效。
- MySQL不能在索引中執行like操作,這是底層儲存引擎API的限制,最左匹配的like比較會被轉換為簡單的比較操作,但如果是以萬用字元開頭的like查詢,儲存引擎就無法做比較。這種情況下MySQL只能提取資料行的值而不是索引值來做比較。
- 如果查詢中的列不是獨立的,則MySQL不會使用索引。獨立的列是指索引列不能是表示式的一部分,也不能是函式的引數。
- 對於多個範圍條件查詢,MySQL無法使用第一個範圍列後面的其他索引列,對於多個等值查詢則沒有這種限制。
- 如果MySQL判斷全表掃描比使用索引查詢更快,則不會使用索引。
- 索引檔案具有B-Tree的最左字首匹配特性,如果左邊的值未確定,那麼無法使用此索引。