【mysql】單表使用索引常見的索引失效


1. 全值匹配我最愛

  全值匹配我最愛指的是,查詢的字段按照順序在索引中都可以匹配到!

  SQL 中查詢字段的順序,跟使用索引中字段的順序,沒有關系。優化器會在不影響SQL 執行結果的前提下,給

你自動地優化。

2.  最佳左前綴法則

 

 

 

  查詢字段與索引字段順序的不同會導致,索引無法充分使用,甚至索引失效!
  原因:使用復合索引,需要遵循最佳左前綴法則,即如果索引了多列,要遵守最左前綴法則。指的是查詢從索
引的最左前列開始並且不跳過索引中的列。
  結論:過濾條件要使用索引必須按照索引建立時的順序,依次滿足,一旦跳過某個字段,索引后面的字段都無
法被使用。

3. 不要在索引列上做任何計算

  不在索引列上做任何操作(計算、函數、(自動or 手動)類型轉換),會導致索引失效而轉向全表掃描。

3.1 在查詢列上使用了函數

  

 

 

  結論:等號左邊無計算!

3.2 在查詢列上做了轉換

 

 

  結論:等號右邊無轉換!

 

4. 索引列上不能有范圍查詢

 

 

   建議:將可能做范圍查詢的字段的索引順序放在最后

 

5. 盡量使用覆蓋索

  即查詢列和索引列一直,不要寫select *!

 

 6. 使用不等於(!= 或者<>)的時候索引失效

  mysql 在使用不等於(!= 或者<>)時,有時會無法使用索引會導致全表掃描。

 

 7. 字段的is not null 和is null

 

   is not null 用不到索引,is null 可以用到索引。

 

8. like 的前后模糊匹配

 

 

   前綴不能出現模糊匹配!

9. 減少使用or

  使用or時不走索引。

 

 

  使用union all 或者union 來替代:

 10. 口訣

  全職匹配我最愛,最左前綴要遵守;
  帶頭大哥不能死,中間兄弟不能斷;
  索引列上少計算,范圍之后全失效;
  LIKE 百分寫最右,覆蓋索引不寫*;
  不等空值還有OR,索引影響要注意;
  VAR 引號不可丟,SQL 優化有訣竅。

 

----尚硅谷_mysql_高級學習筆記


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM