2010-10-29 56 views
3

知道我的InnoDB表不支持FULLTEXT搜索,我想知道我的替代方法是什麼在表中搜索文本?使用LIKE時性能不好?MySQL的InnoDB文本搜索選項

我看到很多建議說要在MYISAM表中創建一個有問題的InnoDB表的副本,然後對THAT表運行查詢並在兩者之間匹配鍵,我只是不知道這是一個漂亮的解。

我並不反對使用一些第三方解決方案,但我不是那麼喜歡。我想更多地探討MySQL可以自己做什麼。

想法?

回答

3

如果你想這樣做正確你應該用LuceneSphinx去從一開始。

  1. 它可以讓你保留你的表結構。
  2. 你就會有一個巨大的性能提升(想出人頭地)
  3. 你就能取得a lot of fancy search functions

兩個Lucene和獅身人面像的規模得非常好(Lucene的權力,維基百科和Digg /獅身人面像權力Slashdot的)

+0

是的,從關於Lucene聊天的數量來看,它看起來像我最好的選擇。感謝大家 ! – JHarnach 2010-11-01 16:45:47

1

使用LIKE只能在沒有前導%時使用索引。在一張大桌子上做LIKE'%foo%'將會是一個巨大的表現。如果我是你,我會考慮使用sphinx。它能夠使用您提供的查詢將數據從MySQL中篡改出來,從而構建其索引。這非常簡單,旨在解決您的確切問題。

還有一個solr,它是一個圍繞lucene的http封裝,但我發現sphinx更直接一點。

0

我作爲其他人,我會敦促使用Lucene,Sphinx或Solr。

但是,如果這些都出來,你的要求很簡單,我已經使用步驟here來建立簡單在過去的多個項目的搜索能力。

該鏈接適用於Symfony/PHP,但您可以將這些概念應用於任何語言和應用程序結構,前提是可以使用干擾算法。但是,如果您不使用數據訪問模式,您可以在更新記錄時更新索引來更新索引,但不易實現。

另外一個缺點是,如果你想要一個索引表,但需要索引多個表,你必須在你的DAL中模擬參照完整性,或者爲每個你想索引的表添加一個fk列。我不知道你想要做什麼,這可能完全排除。