mysql 模糊匹配優化(全文索引)


背景:

      批量插入單詞時,存在單詞匹配例句,批量插入時,like匹配 批量插入時幾十個單詞挨個模糊匹配,接口超時,因為是后台管理系統,不打算接入ES,並且允許接口一定程度的慢,但接口超時得解決

方案:

      1、正則表達式匹配,同樣慢得令人發指

      2、添加全文索引

  只有Innodb和myisam存儲引擎能用全文索引(innodb支持全文索引是從mysql5.6開始的)

  CREATE FULLTEXT INDEX   index   ON  table(`content`);

查看執行計划,確認走了索引

三種類型的全文搜索方式

natural language search(自然語言搜索)

通過MATCH AGAINST 傳遞某個特定的字符串來進行檢,默認方式

boolean search(布爾搜索)

為檢索的字符串增加操作符,如“+”表示必須包含,"-"不包含,"*" 表示通配符,即使傳遞的字符串較小或出現在停詞中,也不會被過濾掉

query expansion search(查詢擴展搜索)

搜索字符串用於執行自然語言搜索,然后,搜索返回的最相關行的單詞被添加到搜索字符串,並且再次進行搜索,查詢將返回來自第二個搜索的行

 

但是具體到執行時間,並沒有太大得差別,難道問題不是出在這個like匹配上?

SELECT
        sentence 
           FROM
           table a
           WHERE
          sentence LIKE      CONCAT('%','one',' %' )
           LIMIT 0,5;

--  0.0109 s

SELECT
           sentence
           FROM
           table a
           WHERE
     match(sentence) against('one')
           LIMIT 0,5;
-- 0.0049 s

后來恍然大悟,因為limit 得原因 關鍵字太簡單,查詢5條,很快就能匹配上,滿足5條直接返回。

經過測試,生僻一點的單詞,like 大約需要消耗2s,全文索引匹配耗時並沒有改變。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM