一天一篇mysql之十七:mysql中的关键字like优化

LIKE 运算符用于 WHERE 表达式中,以搜索匹配字段中的指定内容。那么like如何进行优化呢?这篇博客就简单讨论一下like的优化。

不优化的情况

先建立索引

ALTER TABLE `actor`
ADD INDEX `idx_actor_first_name` (`first_name`) USING BTREE ;

不优化情况下的查询,发现并没有使用索引

1.%号不放最左边

2.使用覆盖索引

如果业务需要%就放开头我们也没办法,一般情况需求都是这样的,毕竟优化还是为业务服务的。

这个时候可以考虑使用覆盖索引(关于覆盖索引:MySQL系列-优化之覆盖索引),假设业务需要通过name来获取用户的age的话,我们可以对last_name、first_name字段建立复合索引。

ALTER TABLE `actor`
DROP INDEX `idx_actor_first_name` ,
ADD INDEX `idx_actor_first_name_lastname` (`first_name`, `last_name`) USING BTREE ;

效果如图:

可以看到,查询是覆盖索引的,起码比全表扫描要好。

如果需要更多字段的数据而不单单是first_name的话,可以进行两次查询,第一次通过name来获取id(这一步是索引扫描),第二步拿获取来的数据在进行id匹配查询(这一步效率很高,ref或者const)。

猜你喜欢

转载自blog.csdn.net/weixin_39666581/article/details/82749887