mysql探索(二) 大資料量下的 “like” 查詢
阿新 • • 發佈:2021-11-30
我們在做業務的時候,經常碰到“模糊查詢”這個需求,通常在資料量少的時候,我們習慣使用 where table.field like '%XXX%"',非常好用。
但是當資料量變大的時候,特別是百萬級的資料表時,再用like查詢,我們會發現,查的要多慢就有多慢。
這是為什麼呢?
我們都知道,資料表字段加索引可以大大加快資料的查詢速度,但是like "%XXX%"這種語句,其實它是不走索引的,所以就算是加了索引的欄位,是用這種方式查詢,也是按照全表掃描的速度一模一樣。
如果要讓like走索引,應該怎麼查呢?
答案是:where like "XXX%",由於mysql的底層機制,當百分號在右邊的時候,是走索引的。
當然,這隻能解決一部分的需求,如果我非得在兩邊都加百分號,應該怎麼辦呢?
好的,這個時候我們可以用《全文索引》來解決這個問題。
第一步:給需要查詢的欄位加上全文索引
第二步:使用對應的語法進行查詢 where MATCH(table.field) AGAINST ('*XXX*' IN BOOLEAN MODE)
就這兩步,就解決了。當然,全文索引還有更多的用法。在這裡我不一一列舉。感興趣的話,可以去查詢相關資料。
今天同時碰到的問題,解決後記一下,以防忘記。
活到老學到老