mysql组合索引like问题

首先我们知道LIKE中只有把百分号放在查询右边才会用到索引

如图所示:

mysql组合索引like问题_第1张图片

看到了这个 type=range就让我们想起了 区间范围查询 

范围查询之后的复合查询都会失效


如图所示:

把其中三个字段设置成复合索引(组合索引)

mysql组合索引like问题_第2张图片

然后我们范围查询  正常结果 qid失效   type=range    key_len 精度=68

mysql组合索引like问题_第3张图片

然后我们把最后pid注释掉 在进行一次查询 验证一下是否真的pid没有用到索引 

发现和上面相同  key_len 精度也是=68

mysql组合索引like问题_第4张图片

结论正确 !   范围区间之后的不会用到其索引

接下来正文: like是不是也和这个一样呢?

看起来like像是一个区间类型  显示的也是 type =range (range不就是范围的意思吗?)

测试验证:

首先建索引

mysql组合索引like问题_第5张图片

如果索引全部用到 key_len为= 73 (因为都是固定值 系统常量加载 不解释了)

mysql组合索引like问题_第6张图片

测试前后都有百分号   %wu%  索引只是引用了第一个pid索引  (很好理解因为除了 like [字符% ] 其他为type=ALL 不会用到索引) 只是相当于断开 ,并没有把索引全部取消掉

mysql组合索引like问题_第7张图片

补充一句: != ,is null,not is null 还有一些函数,统统会把索引取消掉!切记不要乱用!

如:(只把一个作为例子)

mysql组合索引like问题_第8张图片

之前说了一堆没用的   正文如下 :

type是range没有错  但是key_len=73  只有全部索引有效才会显示73 

mysql组合索引like问题_第9张图片

接下来我们把最后索引注释掉,key_len=68精度发生改变!说明刚才真的三个索引全部被加载!虽然type=range

mysql组合索引like问题_第10张图片

总结:我们不能把like理解成范围查询如><之类的,因为范围查询之后的索引不会生效

    对于like 只能特殊情况特殊对待





你可能感兴趣的:(mysql组合索引like问题)