Mysql索引相關優化

Mysql優化

 

 Mysql優化涉及到索引,我理解的索引就是一種數據結構,mysql中常用的數據結構有Hash索引,B+樹索引結構,

Hash索引,它的有點在於時間複雜度讀O(1),但是它有其缺點,不能進行範圍查找操作,

  B+樹數據結構,它沒有紅黑樹樹高高,針對覆蓋索引,子葉節點存放行數據,非覆蓋索引子葉節點存放的是主鍵索引位置信息,需要回表查詢數據

關於創建角度

  1. 創建最好採用覆蓋索引,這樣可以直接獲取行數據不需要進行回表查詢,可以採用EXPLAIN命令執行sql,Extra字段是using index condition 說明使用的是覆蓋所有
  2. 其次,mysql存儲是在磁盤中,磁盤存放是無序的,IO消耗是很嚴重的,索引我們可以打開Mrr設置,目的是讓在回表查詢之前將id緩存起來進行排序,減少IO消耗。

關於索引失效

  1. 是否使用函數,例如String 存放id內部進行隱式轉化cast()導致所有失效
  2. 多張表編碼是否一致
  3. 是否遵循複合索引的最左原則
  4. like 以%開頭,索引無效;當like前綴沒有%,後綴有%時,索引有效
  5. or語句前後沒有同時使用索引。當or左右查詢字段只有一個是索引,該索引失效,只有當or左右查詢字段均爲索引時,纔會生效
  6. 在索引列上使用 IS NULL 或 IS NOT NULL操作。索引是不索引空值的,所以這樣的操作不能使用索引,可以用其他的辦法處理,例如:數字類型,判斷大於0,字符串類型設置一個默認值,判斷是否等於默認值即可。
  7. 在索引字段上使用not,<>,!=。不等於操作符是永遠不會用到索引的,因此對它的處理只會產生全表掃描。 優化方法: key<>0 改爲 key>0 or key<0

索引使用不上

可以臨時採用強制索引,force index

 

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