MySQL索引失效的情況

索引並不是時時都會生效的,比如以下幾種情況,將導致索引失效:

1.如果條件中有or,即使其中有條件帶索引也不會使用(這也是爲什麼儘量少用or的原因)

  注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引

  2.對於多列索引,不是使用的第一部分,則不會使用索引(複合索引,索引匹配規則)

  3.like查詢是以%開頭

    4.如果列類型是字符串,那一定要在條件中將數據使用引號引用起來,否則不使用索引

5.如果mysql估計使用全表掃描要比使用索引快,則不使用索引

此外,查看索引的使用情況

show status like ‘Handler_read%';

大家可以注意:

handler_read_key:這個值越高越好,越高表示使用索引查詢到的次數

handler_read_rnd_next:這個值越高,說明查詢低效。

------------------

1、WHERE字句的查詢條件裏有不等於號(WHERE column!=...),MYSQL將無法使用索引

2、類似地,如果WHERE字句的查詢條件裏使用了函數(如:WHERE DAY(column)=...),MYSQL將無法使用索引

3、在JOIN操作中(需要從多個數據表提取數據時),MYSQL只有在主鍵和外鍵的數據類型相同時才能使用索引,否則即使建立了

 索引也不會使用

4、如果WHERE子句的查詢條件裏使用了比較操作符LIKE和REGEXP,MYSQL只有在搜索模板的第一個字符不是通配符的情況下才能

使用索引。比如說,如果查詢條件是LIKE 'abc%',MYSQL將使用索引;如果條件是LIKE '%abc',MYSQL將不使用索引。

5、在ORDER BY操作中,MYSQL只有在排序條件不是一個查詢條件表達式的情況下才使用索引。儘管如此,在涉及多個數據表的查

詢裏,即使有索引可用,那些索引在加快ORDER BY操作方面也沒什麼作用。

6、如果某個數據列裏包含着許多重複的值,就算爲它建立了索引也不會有很好的效果。比如說,如果某個數據列裏包含了淨是

些諸如“0/1”或“Y/N”等值,就沒有必要爲它創建一個索引。



作者:Daniel521
鏈接:https://www.jianshu.com/p/ff3470407b19
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

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