1、使用or關鍵字(但是并不是所有帶or的查詢都會失效,如果有兩個字段,兩個字段都有索引就不會失效,會走兩個索引)
2、使用like關鍵字(但是并不是所有like查詢都會失效,只有在查詢時字段最左側加%和左右側都加%才會導致索引失效)
3、組合索引(如果查詢的字段在組合索引中不是最左側的字段,那么該組合索引是不會生效的。即左前綴原則)
4、索引列有運算符!=
5、索引列使用了函數(對于這樣情況應當創建基于函數的索引)
6、is null可以使用索引,is not null無法使用索引
7、索引列使用>或者<不一定失效
8、隱式轉換導致索引失效
例子:由于表的字段tu_mdn定義為varchar2(20),但在查詢時把該字段作為number類型以where條件傳給Oracle,這樣會導致索引失效.
錯誤的例子:select * from test where tu_mdn=13333333333;
正確的例子:select * from test where tu_mdn=‘13333333333’;
9、字符型字段為數字時在where條件里不添加引號會造成性能問題,所以字符型字段為數字時需要加上引號
10、計算、函數、類型轉換(自動或手動)導致索引失效
11、不要在 SQL 代碼中使用雙引號
因為字符常量使用單引號。
12、不要將空的變量值直接與比較運算符(符號)比較
13、若中間索引列用到了范圍(>、<、like等),則后面的所以全失效。
innodb搜索引擎的數據結構是B+樹,索引查詢b+樹查詢是通過二分法進行查詢的