MySQL高階 之 索引失效與優化詳解
阿新 • • 發佈:2018-12-18
案例所用的表結構、索引、與資料如下:
索引失效與優化
1、全值匹配我最愛
2、最佳左字首法則(帶頭索引不能死,中間索引不能斷) 如果索引了多個列,要遵守最佳左字首法則。指的是查詢從索引的最左前列開始 並且 不跳過索引中的列。 正確的示例參考上圖。
錯誤的示例: 帶頭索引死:
中間索引斷(帶頭索引生效,其他索引失效):
3、不要在索引上做任何操作(計算、函式、自動/手動型別轉換),不然會導致索引失效而轉向全表掃描
4、mysql儲存引擎不能繼續使用索引中範圍條件(bettween、<、>、in等)右邊的列
5、儘量使用覆蓋索引(只查詢索引的列(索引列和查詢列一致)),減少select *
6、索引欄位上使用(!= 或者 < >)判斷時,會導致索引失效而轉向全表掃描
7、索引欄位上使用 is null / is not null 判斷時,會導致索引失效而轉向全表掃描
8、索引欄位使用like以萬用字元開頭(‘%字串’)時,會導致索引失效而轉向全表掃描
由結果可知,like以萬用字元結束相當於範圍查詢,索引不會失效。與範圍條件(bettween、<、>、in等)不同的是:不會導致右邊的索引失效。
問題:解決like ‘%字串%’時,索引失效問題的方法? 使用覆蓋索引可以解決。
9、索引欄位是字串,但查詢時不加單引號,會導致索引失效而轉向全表掃描
10、索引欄位使用 or 時,會導致索引失效而轉向全表掃描
小總結
--------------------- 作者:走慢一點點 來源:CSDN 原文:https://blog.csdn.net/wuseyukui/article/details/72312574 版權宣告:本文為博主原創文章,轉載請附上博文連結!