
MySQL中為避免索引失效所需注意的問題
類似于書籍的目錄索引,提高資料檢索的效率,降低資料庫的IO成本。
通過索引列對資料進行排序,降低資料排序的成本,降低CPU的消耗。
實際上索引也是一張表,該表中儲存了主鍵與索引字段,并指向實體類的記錄,是以索引列也是要占用空間 的。
雖然索引大大提高了查詢效率,同時卻也降低更新表的速度,如對表進行INSERT、UPDATE、DELETE。因為 更新表時,MySQL 不僅要儲存資料,還要儲存一下索引檔案每次更新添加了索引列的字段,都會調整因為更新所帶來的鍵值變化後的索引信
全值比對 ,對索引中所有列都指定具體值。該情況下,索引生效,執行效率高。
如果索引了多列,要遵守左字首法則。指的是查詢從索引的左前列開始,并且不跳過索引中的列。
建立索引的方式:
Ⅰ、比對最左字首法則,走索引
Ⅱ、違背最左字首法則,索引失效
Ⅲ、如果符合最左字首法則,但是出現跳躍某一列,則隻有左列索引生效
如下,範圍查詢之後的address沒有使用索引
由于,在查詢時,沒有對字元串加單引号,MySQL的查詢優化器,會自動的進行類型轉換,造成索引失效。
示例,name 字段是索引列 , 而 createtime 不是索引列,中間是 or 進行連接配接是不走索引的 :
如果僅僅是尾部模糊比對,索引不會失效。如果是頭部模糊比對,索引失效。
解決方案:覆寫索引
這裡索引失效的原因其實就是上面的第九條
2020-9-6