MySQL進階 之 索引失效與最佳化詳解

來源:互聯網
上載者:User

標籤:動手   water   sel   ast   blank   log   strong   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 時,會導致索引失效而轉向全表掃描

MySQL進階 之 索引失效與最佳化詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.