首先我们知道LIKE中只有把百分号放在查询右边才会用到索引
如图所示:
看到了这个 type=range就让我们想起了 区间范围查询
范围查询之后的复合查询都会失效
如图所示:
把其中三个字段设置成复合索引(组合索引)
然后我们范围查询 正常结果 qid失效 type=range key_len 精度=68
然后我们把最后pid注释掉 在进行一次查询 验证一下是否真的pid没有用到索引
发现和上面相同 key_len 精度也是=68
结论正确 ! 范围区间之后的不会用到其索引
接下来正文: like是不是也和这个一样呢?
看起来like像是一个区间类型 显示的也是 type =range (range不就是范围的意思吗?)
测试验证:
首先建索引
如果索引全部用到 key_len为= 73 (因为都是固定值 系统常量加载 不解释了)
测试前后都有百分号 %wu% 索引只是引用了第一个pid索引 (很好理解因为除了 like [字符% ] 其他为type=ALL 不会用到索引) 只是相当于断开 ,并没有把索引全部取消掉
补充一句: != ,is null,not is null 还有一些函数,统统会把索引取消掉!切记不要乱用!
如:(只把一个作为例子)
之前说了一堆没用的 正文如下 :
type是range没有错 但是key_len=73 只有全部索引有效才会显示73
接下来我们把最后索引注释掉,key_len=68精度发生改变!说明刚才真的三个索引全部被加载!虽然type=range
总结:我们不能把like理解成范围查询如><之类的,因为范围查询之后的索引不会生效
对于like 只能特殊情况特殊对待