天天看點

MySQL中為避免索引失效所需注意的問題

MySQL中為避免索引失效所需注意的問題

MySQL中為避免索引失效所需注意的問題

類似于書籍的目錄索引,提高資料檢索的效率,降低資料庫的IO成本。

通過索引列對資料進行排序,降低資料排序的成本,降低CPU的消耗。

實際上索引也是一張表,該表中儲存了主鍵與索引字段,并指向實體類的記錄,是以索引列也是要占用空間 的。

雖然索引大大提高了查詢效率,同時卻也降低更新表的速度,如對表進行INSERT、UPDATE、DELETE。因為 更新表時,MySQL 不僅要儲存資料,還要儲存一下索引檔案每次更新添加了索引列的字段,都會調整因為更新所帶來的鍵值變化後的索引信

全值比對 ,對索引中所有列都指定具體值。該情況下,索引生效,執行效率高。

如果索引了多列,要遵守左字首法則。指的是查詢從索引的左前列開始,并且不跳過索引中的列。

建立索引的方式:

Ⅰ、比對最左字首法則,走索引

Ⅱ、違背最左字首法則,索引失效

Ⅲ、如果符合最左字首法則,但是出現跳躍某一列,則隻有左列索引生效

如下,範圍查詢之後的address沒有使用索引

由于,在查詢時,沒有對字元串加單引号,MySQL的查詢優化器,會自動的進行類型轉換,造成索引失效。

示例,name 字段是索引列 , 而 createtime 不是索引列,中間是 or 進行連接配接是不走索引的 :

如果僅僅是尾部模糊比對,索引不會失效。如果是頭部模糊比對,索引失效。

解決方案:覆寫索引

這裡索引失效的原因其實就是上面的第九條

2020-9-6

繼續閱讀