常见的不走索引情况

  索引列使用不等于将不走索引,包括:NOT IN 、 NOT EXISTS 、 <> 、 != ,但使用 < 、 <= 、 = 、 > 、 >= 、 BETWEEN 会走索引。
 
  索引列使用了函数将不走索引,如:WHERE DATE (create_time) = '2020-09-03'。
 
  索引列进行了运算将不走索引,如:WHERE age + 1 = 18。
 
  OR左右两边只要有一列为非索引列将不走索引。
 
  数据类型发生了隐式转换将不走索引,如索引列为varchar类型,而查询条件使用int类型,这时就会发生数据类型隐式转换导致索引失效,不走索引示例:WHERE code = 10086,其中索引列code为varchar类型,由于等号两边的数据类型不同,数据库会进行隐式转换,如要查询语句走索引可改为:WHERE code = '10086',提示:为了避免数据类型隐式转换引发索引失效,最好用单引号把查询值围起来,就算索引列是int类型也一样。
 
  索引列使用了模糊查询可能不走索引,如:WHERE name LIKE '%张三%'、WHERE name LIKE '%张三',需要注意的是 WHERE name LIKE '张三%' 会走索引。
 
  索引列使用了IN可能不走索引,数据库会判断IN里面的值的数量,如果数量过多就可能不走索引。

Copyright © 2024 码农人生. All Rights Reserved