1. 程式人生 > >MySQL高階 之 索引失效與優化詳解

MySQL高階 之 索引失效與優化詳解

案例所用的表結構、索引、與資料如下:

索引失效與優化

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  版權宣告:本文為博主原創文章,轉載請附上博文連結!