某些情况下,查询条件中带有索引列,但是用explain执行计划分析时,却发现key值为null;
下面的几种大致场景可能引起这种情况,列举出来,希望大家不要踩坑.
表示广义或者表示否定的查询条件
例如<>、NOT、in、not exists 因为这类查询条件无法精确定位,故而执行计划会选择全表扫描;
前置通配符
即like关键字的使用 如 where a like ‘%b’,这样也会造成 a列的索引效果失效 ,但是若使用后置通配符则不会影响索引效果 例如 where a like ‘b%’,造成这种效果差异的主要原因是使用后置通配符相对而言比前置通配符更方便筛选数据;
索引列比较
某一个表格table 的列A和B都建立了单独索引,查询条件用A=B则会导致索引失效;
索引列值出现null
如果索引列值为null,索引值得个数少于表的count(*),这样一来,执行计划都会扫描全表了,而不是单独扫描索引列;
在where条件中对索引列使用函数
在where条件中 对索引列使用部分函数会导致索引失效,因为大部分函数会改变索引列的值,所以并不方便优先完成对比
转换索引列的数据类型
对索引列的数据类型进行了转换也会造成索引失效
水平有限,能列举的就是这些,欢迎补充