索引失效(在實戰過程中應該是要避免的)

  • 索引失效的常見案例

    1. 全值匹配

    2. 最佳左前綴法則:如果索引了多列,要遵循最左前綴法則。值的是查詢從索引的最左前列開始並且不跳過索引中的列

      1. 帶頭大哥不能死

      2. 中間兄弟不能斷

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

    4. 存儲引擎不能使用索引中範圍條件右邊的列

    5. 儘量使用覆蓋索引(之訪問索引的查詢(即索引列和查詢列一致)),減少select *的操作

    6. mysql在使用不等於(<>)的時候無法使用索引會導致索引失效

    7. is null、is not null也無法使用索引

    8. like 以通配符開頭('%abc')mysql所以失效會變成全表掃描的操作

    9. 字符串不加單引號,索引失效

    10. 少用or,用它連接時索引會失效

  • 結論

    1. 定值、範圍還是排序,一般order by是給個範圍

    2. group by基本上都需要進行排序,會有臨時表產生

    3. 對於單個索引。儘量針對當前query過濾性好的索引

    4. 在選擇組合索引的時候,當前Query中過濾性最好的字段在索引字段順序中位置月靠前越好

    5. 在選擇組合索引的時候,儘量選擇可以能夠包含Query中where子句中更多字段的索引

    6. 儘可能通過分析統計信息和調整Query的寫法來達到選擇合適索引的目的

  • 面試中可能遇到的問題

    1. 如何解決like '%字符串%'時索引不被使用的方法:通過覆蓋索引進行解決,即查詢的結果集儘量被索引覆蓋

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章