-
全值匹配
-
最佳左前綴法則:如果索引了多列,要遵循最左前綴法則。值的是查詢從索引的最左前列開始並且不跳過索引中的列
-
帶頭大哥不能死
-
中間兄弟不能斷
-
-
不在索引列上做任何操作(計算、函數、轉換類型等等),會導致索引失效而轉向全表掃描
-
存儲引擎不能使用索引中範圍條件右邊的列
-
儘量使用覆蓋索引(之訪問索引的查詢(即索引列和查詢列一致)),減少select *的操作
-
mysql在使用不等於(<>)的時候無法使用索引會導致索引失效
-
is null、is not null也無法使用索引
-
like 以通配符開頭('%abc')mysql所以失效會變成全表掃描的操作
-
字符串不加單引號,索引失效
-
少用or,用它連接時索引會失效
結論
-
定值、範圍還是排序,一般order by是給個範圍
-
group by基本上都需要進行排序,會有臨時表產生
-
對於單個索引。儘量針對當前query過濾性好的索引
-
在選擇組合索引的時候,當前Query中過濾性最好的字段在索引字段順序中位置月靠前越好
-
在選擇組合索引的時候,儘量選擇可以能夠包含Query中where子句中更多字段的索引
-
儘可能通過分析統計信息和調整Query的寫法來達到選擇合適索引的目的
面試中可能遇到的問題
-
如何解決like '%字符串%'時索引不被使用的方法:通過覆蓋索引進行解決,即查詢的結果集儘量被索引覆蓋