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_高級學習筆記