mysql索引失效
阿新 • • 發佈:2022-06-06
- 在聯合索引的場景下,查詢條件不滿足最左匹配原則。
- 在聯合索引下,儘量使用明確的查詢列來趨向於走覆蓋索引。
- 索引列參與了運算,會導致全表掃描,索引失效。
- 索引列參與了函式處理,會導致全表掃描,索引失效。
- 模糊查詢時(like語句),模糊匹配的佔位符位於條件的首部。
- 引數型別與欄位型別不匹配,導致型別發生了隱式轉換,索引失效。
- 查詢條件使用or關鍵字,其中一個欄位沒有建立索引,則會導致整個查詢語句索引失效; or兩邊為“>”和“<”範圍查詢時,索引失效。
- 兩列資料做比較,即便兩列都建立了索引,索引也會失效。
- 查詢條件使用不等進行比較時,需要慎重,普通索引會查詢結果集佔比較大時索引會失效。
- 查詢條件使用is null時正常走索引,使用is not null時,不走索引。
- 查詢條件使用not in時,如果是主鍵則走索引,如果是普通索引,則索引失效。
- 查詢條件使用not exists時,索引失效。
- 當查詢條件涉及到order by、limit等條件時,是否走索引情況比較複雜,而且與Mysql版本有關,通常普通索引,如果未使用limit,則不會走索引。order by多個索引欄位時,可能不會走索引。其他情況,建議在使用時進行expain驗證。
- 當查詢條件為大於等於、in等範圍查詢時,根據查詢結果佔全表資料比例的不同,優化器有可能會放棄索引,進行全表掃描。
- Mysql優化器的其他優化策略