2016 - 2024

感恩一路有你

sql优化常用的几种方法 分析为什么mysql中like模糊查询效率低?

浏览量:2009 时间:2021-03-14 18:26:52 作者:admin

分析为什么mysql中like模糊查询效率低?

相比update和insert,一般查询应该是数据库中操作最频繁的。而在有些应用场景需要用到like模糊查询,那么对于大数据,查询的时候就要注意了。

现在来分析一下为什么like语句查询的效率会很低,测试数据共4000000条,如下图:

第一步:不使用索引

下图可以看出,不使用索引的时候普通查询与like查询的耗时相当,like略长,这也是必然的,因为它要进行额外的算法。

第二步:使用索引

如下图,使用索引后,普通查询的耗时基本算是秒查,非常快;而like查询还是耗时一秒多。

第三步:分析原因

如下图,用explain分析一下,此时我们立刻明白了,普通查询用到了索引,但是like语句没有用到索引。

所以,照成mysql中like查询效率低下的原因是:在有些情况下,like查询使用不到索引,会扫描全表。

最后,补充一下,like语句有时候也是可以用到索引的,如下图,如果我们查询的时候写成“like "dd_"或者like "dd%"”,这样是可以用到索引的,此时的查询速度也会相对的快一点。虽然快了一点,但是还是比普通查询耗时要多很多。

因此,当表的数据量比较大的时候,尽量还是不要用like语句了。如果想做模糊搜索,建议用搜索引擎,比如solr,这样会比like强大n倍。

MySQL模糊查询like和ilike的区别?

LIKE 和 ILIKE 操作符可以模糊匹配字符串,LIKE是一般用法,ILIKE匹配时则不区分字符串的大小写,~ 波浪号则可以使用正则匹配。


LIKE和 ILIKE


它们需要结合通配符使用,下面介绍两种常用的通配符。

%:百分号用于匹配字符串序列,可匹配任意组合;

_:下划线用于匹配任何单一字符。


则可以使用正则模式来匹配字符串,除此之外它匹配模式还有一个特殊的地方

select * from table where ~ "ab" --> 如果是这样的形式就代表着他可以匹配任何包含ab的字符串其实就相当于省略的两边的 .*


如果想要做前缀匹配或后缀匹配,可以用下面的方法

1、前缀 模糊查询。

select * from table where ~ "^ab"


2、后缀 模糊查询。

select * from table where ~ "ab$"

sql优化常用的几种方法 mysql模糊查询千万数据 mysql中like模糊查询

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。