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會放棄索引