- or:如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什么盡量少用or的原因)
- 注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引
- 聯合索引,不是使用的第一部分,則不會使用索引(未滿足最左前綴原則)
- 模糊查詢:like查詢是以%開頭
- 模糊查詢不以 % 開頭,會使用索引
- 針對以 % 開頭索引失效的問題,解決方案:使用覆蓋索引
- 字符串:如果列類型是字符串,那一定要在條件中將數據使用引號引用起來,否則不使用索引;
- 運算操作:在索引列上做任何操作(計算,函數,(自動或者手動)類型裝換),會導致索引失效而導致全表掃描
- 范圍條件:存儲引擎不能使用索引中范圍條件右邊的列,范圍之后索引失效。(< ,> between and)
- 不等於:mysql使用不等於(!= 或者<>)的時候,無法使用索引,會導致索引失效
- 是否為空:mysql中使用is not null 或者 is null會導致無法使用索引
- 全表掃描更優:如果mysql估計使用全表掃描要比使用索引快,則不使用索引