2013-06-12 75 views
4

這可能對問題過於籠統或主觀,但我需要幫助,我甚至不確定正確和簡潔的問題是什麼。在過去的幾天裏,我已經做了大量的谷歌搜索,試圖理解這一點,而且我比以往更加困惑於採取什麼方法。搜索性能和數據完整性的最佳實踐(或最佳引擎)

在MySQL中,我爲產品目錄構建了一個數據庫。我必須跟蹤一些多對多的關係,例如產品標籤,產品類別,所以我決定我需要在這些表中使用INNODB,以便我可以利用FOREIGN KEY約束條件。這很好,但是。 INNODB不支持FULLTEXT。我讀過在WHERE子句中使用LIKE '%WORD%'的性能不佳,因爲當通配符在搜索詞前面不能使用索引。數據庫在某些時候可能會有很多條目,我不想永久搜索。

那麼人們如何擁有他們的蛋糕並且也吃了呢?我是否需要選擇其中一個:FULLTEXTFOREIGN KEY?我應該做一個只包含最多搜索相關列的摘要MYISAM表,並使用INNODB表上的觸發器來更新它?難道這不會 - 至少部分地 - 首先擊敗使用FOREIGN KEY限制的獎金:消除重複和多餘的數據?搜索大型數據庫以最佳性能工作的最佳模式是什麼 - 至少在使用INNODBMYISAM

如果有人光明和有經驗,至少可以指引我朝着正確的方向,我將不勝感激。提前致謝。

+3

InnoDB從v5.6開始支持'FULLTEXT'。 – eggyal

+0

此演示文稿有一些關於postgresql全文搜索的有趣信息http://www.slideshare.net/billkarwin/full-text-search-in-postgresql(編輯:Bill Karwin在我發佈這篇文章後幾秒鐘就回答了,Doh! :-) –

回答

5

我在去年做了一個網絡研討會演示Full Text Search Throwdown來比較不同的全文搜索工具,包括MyISAM FULLTEXT索引,MySQL 5.6中InnoDB FULLTEXT索引的新實現。您還可以在Slideshare上找到我的幻燈片:Full Text Search Throwdown

對於表現,Sphinx Search是明顯的贏家。我已經諮詢了大多數使用InnoDB存儲其規範數據的站點,並使用Sphinx Search來存儲相同數據的輔助索引。然後,您將獲得兩全其美的優勢:InnoDB的數據完整性和Sphinx Search的速度。

Sphinx Search的缺點是很難增加更多的內容到給定的獅身人面像搜索索引增量。向索引添加單行需要儘可能多地重新索引整個集合。這有幾個解決方法。

InnoDB FTS非常新穎,它有一些奇怪的怪癖。你可能想在Percona的閱讀的深入審查由我的同事:

PS:不要使用MyISAM。 :-)

+0

感謝您的回答。聽起來很有希望。我正在閱讀獅身人面像。我沒有聽說過InnoDB全文,我也會檢查一下。 – user1433150

3

請勿使用MySQL進行基於文本的搜索。這不是正確的工具。使用這種特殊的解決方案,如Lucene
這是我1分的意見。
您可以使用MySQL中的文本搜索,但沒有任何性能期望。