由于數據庫索引不是為全文索引設計的,因此,使用like "%keyword%"時,數據庫索引是不起作用的,在使用like查詢時,搜索過程又變成類似于一頁頁翻書的遍歷過程了,所以對于含有模糊查詢的數據庫服務來說,LIKE對性能的危害是極大的。如果是需要對多個關鍵詞進行模糊匹配:like"%keyword1%" and like "%keyword2%" ...其效率也就可想而知了。
 Lucene全文索引引擎數據庫
索引將數據源中的數據都通過全文索引一一建立反向索引對于LIKE查詢來說,數據傳統的索引是根本用不上的。數據需要逐個便利記錄進行GREP式的模糊匹配,比有索引的搜索速度要有多個數量級的下降。
匹配效果通過詞元(term)進行匹配,通過語言分析接口的實現,可以實現對中文等非英語的支持。使用:like "%net%" 會把netherlands也匹配出來,
多個關鍵詞的模糊匹配:使用like "%com%net%":就不能匹配詞序顛倒的xxx.net..xxx.com
匹配度有匹配度算法,將匹配程度(相似度)比較高的結果排在前面。沒有匹配程度的控制:比如有記錄中net出現5詞和出現1次的,結果是一樣的。
結果輸出通過特別的算法,將最匹配度最高的頭100條結果輸出,結果集是緩沖式的小批量讀取的。返回所有的結果集,在匹配條目非常多的時候(比如上萬條)需要大量的內存存放這些臨時結果集。
可定制性通過不同的語言分析接口實現,可以方便的定制出符合應用需要的索引規則(包括對中文的支持)沒有接口或接口復雜,無法定制
結論高負載的模糊查詢應用,需要負責的模糊查詢的規則,索引的資料量比較大使用率低,模糊匹配規則簡單或者需要模糊查詢的資料量少
Lucene簡介[中文]