为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Qyouu 2019-08-24 22:09:12
问题描述:学习时,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*fromproductswhereactor='SEAN'andtitlelike'%APOLLO%';执行结果是:Extra是Usingwhere;Usingindex,所以说即使执行了LIKE也还是覆盖索引请问是MySQL版本的问题吗,还是我的理解有问题?感谢!
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

覆盖索引是因为表字段就2个,都被索引包含,但只用到了索引第一列actor,可以查看EXPLAIN的ref字段,只有一个const
                            
查看完整回答
反对 回复 2019-08-24
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

覆盖索引采用b+tree,上层是actor,actor子叶是title,所以判断是采用了索引。
like是可以采用索引的,如果你用b+tree,可以用like'AP%',这样规定字段开头是可以命中b+bree,因为b+tree本来就是按照顺序存储。
ps:并不是所有的like都是洪水猛兽!
                            
查看完整回答
反对 回复 2019-08-24
  • 2 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信