曾經在工作中遇到了乙個難辦的問題:我們有乙個表大概有50萬條資料,其中有乙個欄位是字串型別需要實現like 模糊查詢,我們使用的是mysql,雖然已經建立了索引,但是由於使用的是%a%模式匹配,很不給力,在大量併發下,資料庫會掛掉,或者使用者等到抓狂查詢結果還不出來,後來想出了乙個辦法解決了這個問題,每次查詢可以控制在15ms左右,效果很是不錯。我們採用是全文索引技術:
1、使用lucene或者其他可以提供全文索引的nosql資料庫,比如tt server或mongodb
2、把需要模糊查詢的字段的字串資料進行」全分詞「,即把所有可能分詞都列舉出來,比如abc,可以分成a,ab,abc,b,bc,c
3、把這些分好的term建立索引,如果使用lucene則需要建立乙個分詞器,能把傳入的字串分解成第2步描述的分詞後建立索引,如果使用的是mongodb,則把分好的詞存入乙個字段並且建立索引,如果使用的tt server,那就簡單了,直接建立qgram型別的索引即可,不需要自己去分詞,我們最終就是使用tt server解決的問題
4、使用各自提供的查詢語法進行查詢,絕對高效
最終採用tt server的qgram方式實現,50多萬條資料的模糊查詢時間不超過15毫秒,有快取的情況可能是0ms。
使用全文索引技術實現高效的like模糊查詢功能
曾經在工作中遇到了乙個難辦的問題 我們有乙個表大概有50萬條資料,其中有乙個欄位是字串型別需要實現like 模糊查詢,我們使用的是mysql,雖然已經建立了索引,但是由於使用的是 a 模式匹配,很不給力,在大量併發下,資料庫會掛掉,或者使用者等到抓狂查詢結果還不出來,後來想出了乙個辦法解決了這個問題...
全文索引的使用
sp fulltext database enable 啟動全文索引 sp fulltext catalog member info create 建立全文索引目錄 create unique index pk memberid on member memberid 需要建立唯一索引 sp full...
Mysql 使用全文索引
mysql5.6之前 fulltext索引只支援myisam的表型別,5.6開始在innodb型別中開始支援。建立全文索引需要注意,預設索引詞最小單位是4,一般都需要稍微修改一下,show variables like ft min word len 檢視預設 linux 修改 etc my.cnf...