mysql對于模糊查詢like的一些匯總
1、常見用法:
(1)搭配%使用
%代表一個或多個字符的通配符,譬如查詢字段name中以大開頭的數(shù)據(jù):
(2)搭配_使用
_代表僅僅一個字符的通配符,把上面那條查詢語句中的%改為_,會發(fā)現(xiàn)只能查詢出下面一條數(shù)據(jù):
2、使用like模糊查詢會導(dǎo)致索引失效,在數(shù)據(jù)量大的時候會有性能問題
(1)盡量少以%或者_(dá)開頭進(jìn)行模糊查詢
通過explain執(zhí)行計劃,我們發(fā)現(xiàn),使用like模糊查詢時,如果不以%和_開頭查詢的話,索引還是有效的
以%或者_(dá)開頭查詢,索引失效
(2)使用覆蓋索引
當(dāng)查詢的的條件和查詢的結(jié)果都是索引中的字段的時候,這個索引我們可以稱之為覆蓋索引,這個時候,使用like模糊查詢索引是有效的
InnoDB中主鍵可以不添加進(jìn)索引中
注意:使用覆蓋索引,對于字段的長度是由要求限制的,一般超過長度,索引也會失效
這里如果我查詢中帶有descripition字段,則覆蓋索引也會失效(我這里的數(shù)據(jù)庫經(jīng)過測試最多只支持255長度的字段)
(3)使用全文索引
給字段建立Full Text索引,然后使用match(...) against(...)進(jìn)行檢索
注意:這種全文索引方式只對英文單詞起作用,對于中文漢字支持不夠友好,需要額外去mysql的配置文件做一些配置修改,讓它額外支持中文
(4)使用一些額外的全文搜索引擎來解決
Lucene,solr,elasticsearch等等
基本原理是:把mysql配置文件中的ft_min_word_len=3改為1。(沒有這項就直接添加),然后新建一個字段來保持分詞結(jié)果,給這個字段建立全文索引。然后實現(xiàn)一個分詞模塊,把詞語“大家好”拆分為“大 大家 大家好 家 家好 好”。然后用match .. against 來代替like %%,查詢出來的結(jié)果跟like的結(jié)果基本相同(如果分詞合理的話),但是效率比like高至少10倍以上。
總結(jié)
到此這篇關(guān)于mysql對于模糊查詢like的文章就介紹到這了,更多相關(guān)mysql模糊查詢like內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
多次執(zhí)行mysql_fetch_array()的指針歸位問題探討
多次執(zhí)行mysql_fetch_array(),在第二次執(zhí)行的時候,如果不加處理,就不會輸出任何內(nèi)容,這種情況下只需要對循環(huán)指針進(jìn)行復(fù)位即可,感興趣的朋友可以了解下啊,或許對你有所幫助2013-01-01MySQL 不用存儲過程循環(huán)插入數(shù)據(jù)的方法
在MySQL中,使用INSERT INTO VALUES語句可以一次性插入多行數(shù)據(jù),提高插入效率,還可通過Python的pymysql庫生成和執(zhí)行插入語句,這不僅減少了操作時間,還提高了代碼的簡潔性和執(zhí)行效率2024-09-09Mysql8報錯this is incompatible with sql_mo
這篇文章主要介紹了Mysql8報錯this is incompatible with sql_mode=only_full_group_by問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01低版本Druid連接池+MySQL驅(qū)動8.0導(dǎo)致線程阻塞、性能受限
應(yīng)用升級MySQL驅(qū)動8.0后,在并發(fā)量較高時,查看監(jiān)控打點,Druid連接池拿到連接并執(zhí)行SQL的時間大部分都超過200ms,本文就解決一下這個問題2021-07-07Mysql 存儲過程中使用游標(biāo)循環(huán)讀取臨時表
這篇文章主要介紹了Mysql 存儲過程中使用游標(biāo)循環(huán)讀取臨時表的方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2020-12-12