zoukankan      html  css  js  c++  java
  • MySQL系列-优化之like关键字 创建索引

    原文: https://blog.csdn.net/ufo___/article/details/81164996

     
    MySQL系列-优化之覆盖索引:   https://blog.csdn.net/UFO___/article/details/81162087

    索引效果比对:           https://blog.csdn.net/weixin_39800144/article/details/81510785

    like关键字我们也是经常使用,用来模糊查询用户名,那么like如何进行优化呢?这篇博客就简单讨论一下like的优化,但是真实的生产环境要比这复杂多了。

    1.%号不放最左边

    先创建表和索引。

    然后进行查询【explain select * from tb where name like 'e%';】

    可以看到我们的查询使用上了idx_name这个索引,因为我们的 'e%' 规定了只要以字符 'e' 开头的name,所以MySQL使用上了我们建立的索引。

    把sql修改一下在进行查询【explain select * from tb where name like 'e%y_t';】

    同样使用上了建立的索引。

    再来修改一下【explain select * from tb where name like '%e%';】

     

    可以看到这个时候就无法使用索引了,开头是不确定的,MySQL也无法进行优化了,只能扫描表了。

    2.使用覆盖索引

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

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

    创建复合索引idx_name_age:

     

    执行sql【explain select name,age from tb where name like '%e%';】

     

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

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

  • 相关阅读:
    make 实例 一 3463
    python3 中对arrow库的总结(转发)
    impala 导出CSV 或excel
    设置虚拟机IP
    centos7 tomcat9
    eclipse 创建普通maven项目
    java log4j日志配置
    java运行jar命令提示没有主清单属性
    Java 读取 .properties 配置文件
    python 机器学习多项式回归
  • 原文地址:https://www.cnblogs.com/hahajava/p/10076777.html
Copyright © 2011-2022 走看看