MySQL索引失效場景

mysql很多小夥伴都不陌生,索引是sql調優的必經之路,這裏列舉了我收集的mysql忽略索引的例子,部分不好理解的做了解釋;

1.like以%開頭,索引無效

舉例:select * from table where key like '%hhhh'

2.or語句沒有同時使用索引

舉例:select * from table where key1 ==1 or key2==2

如上:假設key1用了索引,key2沒有使用索引,則會導致索引失效

3.組合索引不滿足最左匹配原則,between,大於、小於範圍查詢等會導致索引中斷

舉例:index(a,b,c)
where a=3    只使用了a
where a=3 and b=5    使用了a,b
where a=3 and b=5 and c=4    使用了a,b,c
where b=3 or where c=4    沒有使用索引
where a=3 and c=4    僅使用了a
where a=3 and b>10 and c=7    使用了a,b
where a=3 and b like 'xx%' and c=7    使用了a,b

4.數據類型出現隱式轉換

舉例:如varchar不加單引號的話可能會自動轉換爲int型,使索引無效,產生全表掃描。

5.在索引列使用IS NULL或IS NOT NULL操作

6.在索引字段使用not,<>,!=不等於操作永遠不會使用到索引

7.在索引字段進行計算操作

8.在索引字段使用函數

9.當全表掃描速度比索引快時,mysql會使用全表掃描,這時候mysql會放棄索引
 

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