Mysql引起索引失效的原因總結,mysql索引失效總結
http://blog.csdn.net/hehexiaoxia/article/details/54312130
在資料庫中做查詢等操作,經常發現查詢很慢,但是已經在列上建了索引,最後經過研究發現,很多種情況引起了索引失效。
下面就對遇到的引起索引失效的原因做一下總結(不包括索引本身無效的情況),歡迎博友們補充。
1、對單欄位建了索引,where條件多欄位。
例:建了以下索引:
查詢語句:
[html] view plain copy
- select * from template t where t.logicdb_id = 4 and t.sync_status = 1
2、建立聯合索引,where條件單欄位。與上面情況正好相反。
例:建了以下索引:
查詢語句:
[html] view plain copy
- select * from template t where t.sync_status = 4
3、對索引列運算,運算包括(+、-、*、/、!、<>、%、like'%_'(%放在前面)、or、in、exist等),導致索引失效。
4、類型錯誤,如欄位類型為varchar,where條件用number。
例:template_id欄位是varchar類型。
錯誤寫法:select * from template t where t.template_id = 1
正確寫法:select * from template t where t.template_id = '1'
5、對索引應用內建函式,這種情況下應該建立基於函數的索引。
例:
[html] view plain copy
- select * from template t where ROUND(t.logicdb_id) = 1
此時應該建ROUND(t.logicdb_id)為索引。
6、查詢表的效率要比應用索引查詢快的時候。
7、is null 索引失效;is not null Betree索引生效。導致的原因,個人認為應該是,mysql沒有在null寫進索引。還要看應用的資料庫而定。
查看評論