如何优化mysql like %xxx%模糊查询?
如何优化mysql like %xxx%模糊查询?
登录
如何优化mysql like %xxx%模糊查询?
如何优化mysql like %xxx%模糊查询?

如何优化mysql like %xxx%模糊查询?

本文主要讲解关于如何优化mysql like %xxx%模糊查询相关内容,让我们来一起学习下吧!

今天给大家分享一个小知识,实际项目中,like %xxx%的情况其实挺多的,比如某个表单如果支持根据公司名进行搜索,用户一般都是输入湖南xxx有限公司中的xxx进行搜索,所以对于接口而言,就必须使用like %xxx%来支持,从而不符合最左前缀原则导致索引失效,那么该如何优化这种情况呢?

第一种可以尝[]试的方案就是[]利用索引条件[]下推,我先演[]示再讲原理,[]比如我有下面[]一张订单表:[]

如何优化mysql like %xxx%模糊查询?

就算给company_name创建一个索引,执行where company_name like '%腾讯%'也不会走索引。

如何优化mysql like %xxx%模糊查询?

但是如果给created_at, company_name创建一个联合索引,那么执行where created_at=CURDATE() and company_name like '%腾讯%'就会走联合索引,并且company_name like '%腾讯%'就会利用到索引条件下推机制,比如下图中Extra里的Using index condition就表示利用了索引条件下推。

如何优化mysql like %xxx%模糊查询?

所以,并不是like %xxx%就一定会导致索引失效,原理也可以配合其他字段一起来建联合索引,从而使用到索引条件下推机制。

再来简单分析[]一下索引条件[]下推的原理,[]在执行查询时[]先利用SQL[]中所提供的c[]reated[]_at条件在[]联合索引B+[]树中进行快速[]查找,匹配到[]所有符合cr[]eated_[]at条件的B[]+树叶子节点[]后,再根据c[]ompany[]_name条[]件进行过滤,[]然后再根据过[]滤之后的结果[]中的主键ID[]进行回表找到[]其他字段(回[]表),最终才[]返回结果,这[]样处理的好处[]是能够减少回[]表的次数,从[]而提高查询效[]率。

当然,如果实[]在不能建立或[]不方便建立联[]合索引,导致[]不能利用索引[]条件下推机制[],那么其实可[]以先试试My[]sql中的全[]文索引,最后[]才考虑引入E[]S等中间件,[]当然Mysq[]l其他一些常[]规优化机制也[]是可以先考虑[]的,比如分页[]、索引覆盖([]不selec[]t *)等。

以上就是关于如何优化mysql like %xxx%模糊查询相关的全部内容,希望对你有帮助。欢迎持续关注潘子夜个人博客,学习愉快哦!



    版权归属: noBug
    相关推荐

    评论区

    评论头像