mysql對(duì)于模糊查詢(xún)like的一些匯總
1、常見(jiàn)用法:
(1)搭配%使用
%代表一個(gè)或多個(gè)字符的通配符,譬如查詢(xún)字段name中以大開(kāi)頭的數(shù)據(jù):

(2)搭配_使用
_代表僅僅一個(gè)字符的通配符,把上面那條查詢(xún)語(yǔ)句中的%改為_(kāi),會(huì)發(fā)現(xiàn)只能查詢(xún)出下面一條數(shù)據(jù):

2、使用like模糊查詢(xún)會(huì)導(dǎo)致索引失效,在數(shù)據(jù)量大的時(shí)候會(huì)有性能問(wèn)題
(1)盡量少以%或者_(dá)開(kāi)頭進(jìn)行模糊查詢(xún)
通過(guò)explain執(zhí)行計(jì)劃,我們發(fā)現(xiàn),使用like模糊查詢(xún)時(shí),如果不以%和_開(kāi)頭查詢(xún)的話(huà),索引還是有效的


以%或者_(dá)開(kāi)頭查詢(xún),索引失效


(2)使用覆蓋索引
當(dāng)查詢(xún)的的條件和查詢(xún)的結(jié)果都是索引中的字段的時(shí)候,這個(gè)索引我們可以稱(chēng)之為覆蓋索引,這個(gè)時(shí)候,使用like模糊查詢(xún)索引是有效的


InnoDB中主鍵可以不添加進(jìn)索引中
注意:使用覆蓋索引,對(duì)于字段的長(zhǎng)度是由要求限制的,一般超過(guò)長(zhǎng)度,索引也會(huì)失效
這里如果我查詢(xún)中帶有descripition字段,則覆蓋索引也會(huì)失效(我這里的數(shù)據(jù)庫(kù)經(jīng)過(guò)測(cè)試最多只支持255長(zhǎng)度的字段)



(3)使用全文索引
給字段建立Full Text索引,然后使用match(...) against(...)進(jìn)行檢索


注意:這種全文索引方式只對(duì)英文單詞起作用,對(duì)于中文漢字支持不夠友好,需要額外去mysql的配置文件做一些配置修改,讓它額外支持中文
(4)使用一些額外的全文搜索引擎來(lái)解決
Lucene,solr,elasticsearch等等
基本原理是:把mysql配置文件中的ft_min_word_len=3改為1。(沒(méi)有這項(xiàng)就直接添加),然后新建一個(gè)字段來(lái)保持分詞結(jié)果,給這個(gè)字段建立全文索引。然后實(shí)現(xiàn)一個(gè)分詞模塊,把詞語(yǔ)“大家好”拆分為“大 大家 大家好 家 家好 好”。然后用match .. against 來(lái)代替like %%,查詢(xún)出來(lái)的結(jié)果跟like的結(jié)果基本相同(如果分詞合理的話(huà)),但是效率比like高至少10倍以上。
總結(jié)
到此這篇關(guān)于mysql對(duì)于模糊查詢(xún)like的文章就介紹到這了,更多相關(guān)mysql模糊查詢(xún)like內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. DB2 與 Microsoft SQL Server 2000 之間的 SQL 數(shù)據(jù)復(fù)制2. DB2 XML 全文搜索之為文本搜索做準(zhǔn)備3. SQL Server使用CROSS APPLY與OUTER APPLY實(shí)現(xiàn)連接查詢(xún)4. 細(xì)化解析:Oracle 10g ASM 的一點(diǎn)經(jīng)驗(yàn)5. MyBatis中$和#的深入講解6. Microsoft Office Access添加頁(yè)眉或頁(yè)腳的方法7. MySQL InnoDB架構(gòu)的相關(guān)總結(jié)8. DB2數(shù)據(jù)庫(kù)安全性全面介紹(1)9. 把SQL SERVER里表里的數(shù)據(jù)導(dǎo)出成為insert into 腳本10. mysql中使用date_add()函數(shù)講解

網(wǎng)公網(wǎng)安備