请教各位一个问题,求解答:MySQL覆盖索引时允许索引执行LIKE操作吗?跪求!

问题描述:学习<<高性能MySQL>>时,p172举例explainselect*fromproductsfromactor='SEANCARREY'andtitlelike'%APOLLO%',解释这里索引无法覆盖该查询的原因其中第二个是:MySQL不能在索引中执行LIKE操作.但是我实际发现,即使索引执行了LIKE也是可以覆盖索引的!
演示代码:
--基于MySQL版本:8.0.16
--创建一个只有2个字段的表
droptableifexistsproducts;
createtableproducts(
actorvarchar(20),
titlevarchar(20)
);
--创建覆盖所有字段的索引,并未指定索引长度
createindexidx_actor_titleonproducts(actor,title);
--索引执行LIKE操作,查看explain结果
explainselect*fromproducts
whereactor='SEAN'andtitlelike'%APOLLO%';
执行结果是:Extra是Usingwhere;Usingindex,所以说即使执行了LIKE也还是覆盖索引
请问是MySQL版本的问题吗,还是我的理解有问题?感谢!
Qyouu
浏览 213回答 2
2回答

蝴蝶刀刀

覆盖索引是因为表字段就2个,都被索引包含,但只用到了索引第一列actor,可以查看EXPLAIN的ref字段,只有一个const

素胚勾勒不出你

覆盖索引采用b+tree,上层是actor,actor子叶是title,所以判断是采用了索引。like是可以采用索引的,如果你用b+tree,可以用like'AP%',这样规定字段开头是可以命中b+bree,因为b+tree本来就是按照顺序存储。ps:并不是所有的like都是洪水猛兽!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript