首页 新闻 搜索 专区 学院

为什么我mysql用的like “%aaa%”用了索引

0
悬赏园豆:10 [已解决问题] 解决于 2018-01-29 14:17

问一个关于索引的问题,like '%aaa%'这种应该是不走索引的,但是为什么我运行了一下,发现使用了索引,求大神帮忙解答一下,
EXPLAIN SELECT `date` FROM zt_action WHERE `action` LIKE '%ct%';


zt_action表我建了联合索引
CREATE INDEX `actor_action_date` ON zt_action(`actor,action,date`),
请大神来帮忙解答,

坐在家里晒太阳的主页 坐在家里晒太阳 | 初学一级 | 园豆:117
提问于:2018-01-29 13:03
< >
分享
最佳答案
0

这个只是没从实际数据行进行查找,直接从索引中进行查找,类似mssql的index scan,性能并不会好到哪去。

收获园豆:10
Daniel Cai | 专家六级 |园豆:10374 | 2018-01-29 13:50

那这个是不是使用了索引呢,

坐在家里晒太阳 | 园豆:117 (初学一级) | 2018-01-29 13:52

@坐在家里晒太阳: 是,但是相当低效的

Daniel Cai | 园豆:10374 (专家六级) | 2018-01-29 13:53

@Daniel Cai: 虽然低效,但是也是使用了索引,那Mysql里说以通配符 % 和 _ 开头作查询时,MySQL不会使用索引,这不是与之相反的说法吗

坐在家里晒太阳 | 园豆:117 (初学一级) | 2018-01-29 13:56

@坐在家里晒太阳: 一般意义上的使用了索引和你所谓的使用了“索引”是两码事。

你这块的explain中的type是index,也就是只是通过在索引中一条条的的查找完成搜索(可以理解为对整个索引做一次遍历)

而一般意义的使用索引是通过索引直接快速定位数据

这两种是不相同的,性能也是两个完全不同的天地,要是正常点的查询要用上索引那里的type应该是ref以上

Daniel Cai | 园豆:10374 (专家六级) | 2018-01-29 14:06

@Daniel Cai: 感谢大神回答,之前一直有误区,以为用到了索引表,就是使用了索引,看来不是这样的,继续学习中

坐在家里晒太阳 | 园豆:117 (初学一级) | 2018-01-29 14:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册