mysql中l(wèi)ike模糊查詢 MySQL模糊查詢like和ilike的區(qū)別?
MySQL模糊查詢like和ilike的區(qū)別?LIKE 和 ILIKE 操作符可以模糊匹配字符串,LIKE是一般用法,ILIKE匹配時則不區(qū)分字符串的大小寫,~ 波浪號則可以使用正則匹配。LIKE和
MySQL模糊查詢like和ilike的區(qū)別?
LIKE 和 ILIKE 操作符可以模糊匹配字符串,LIKE是一般用法,ILIKE匹配時則不區(qū)分字符串的大小寫,~ 波浪號則可以使用正則匹配。
LIKE和 ILIKE
它們需要結合通配符使用,下面介紹兩種常用的通配符。
%:百分號用于匹配字符串序列,可匹配任意組合;
_:下劃線用于匹配任何單一字符。
則可以使用正則模式來匹配字符串,除此之外它匹配模式還有一個特殊的地方
select * from table where ~ "ab" --> 如果是這樣的形式就代表著他可以匹配任何包含ab的字符串其實就相當于省略的兩邊的 .*
如果想要做前綴匹配或后綴匹配,可以用下面的方法
1、前綴 模糊查詢。
select * from table where ~ "^ab"
2、后綴 模糊查詢。
select * from table where ~ "ab$"
分析為什么mysql中l(wèi)ike模糊查詢效率低?
相比update和insert,一般查詢應該是數據庫中操作最頻繁的。而在有些應用場景需要用到like模糊查詢,那么對于大數據,查詢的時候就要注意了。
現在來分析一下為什么like語句查詢的效率會很低,測試數據共4000000條,如下圖:
第一步:不使用索引
下圖可以看出,不使用索引的時候普通查詢與like查詢的耗時相當,like略長,這也是必然的,因為它要進行額外的算法。
第二步:使用索引
如下圖,使用索引后,普通查詢的耗時基本算是秒查,非??欤欢鴏ike查詢還是耗時一秒多。
第三步:分析原因
如下圖,用explain分析一下,此時我們立刻明白了,普通查詢用到了索引,但是like語句沒有用到索引。
所以,照成mysql中l(wèi)ike查詢效率低下的原因是:在有些情況下,like查詢使用不到索引,會掃描全表。
最后,補充一下,like語句有時候也是可以用到索引的,如下圖,如果我們查詢的時候寫成“l(fā)ike "dd_"或者like "dd%"”,這樣是可以用到索引的,此時的查詢速度也會相對的快一點。雖然快了一點,但是還是比普通查詢耗時要多很多。
因此,當表的數據量比較大的時候,盡量還是不要用like語句了。如果想做模糊搜索,建議用搜索引擎,比如solr,這樣會比like強大n倍。