1. 程式人生 > >MySQL索引失效的場景

MySQL索引失效的場景

原因 where sql 提取 很好 exp 第一個字符 join abc

  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”等值,就沒有必要為它創建一個索引。
  7. 對於多列索引,不是使用的第一部分,則不會使用索引
  8. 如果條件中有or(並且其中有or的條件是不帶索引的),即使其中有條件帶索引也不會使用(這也是為什麽盡量少用or的原因)。註意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引
  9. 如果列類型是字符串,那一定要在條件中將數據使用引號引用起來,否則不使用索引
  10. 如果mysql估計使用全表掃描要比使用索引快,則不使用索引

MySQL索引失效的場景