• 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)。

  • 相关阅读:
    【日语】日语学习计划(转载)
    【日语】日语商务情景口语
    Nop常用知识点
    c#版在pc端发起微信扫码支付
    nopcommerce 常用属性验证
    @codeforces
    @codeforces
    @codeforces
    @codeforces
    @codeforces
  • 原文地址:https://www.cnblogs.com/hahajava/p/10076777.html
Copyright © 2020-2023  润新知