2012-01-05 97 views
8

我目前正在研究提供高級搜索我的PHP項目的最佳方法。Mysql搜索 - InnoDB和交易與MyISAM for FULLTEXT搜索

我已經縮小到使用FULLTEXT搜索而不是使用LIKE在表格行中查找匹配的字符串。但是,爲了做到這一點,我需要使用InnoDB引擎來犧牲它,這會使我失去事務和表關係的ACIDity。

真的值得使用MYISAM mysql引擎還是有更好的方式提供搜索功能。

任何指針,將不勝感激!

回答

7

它確實取決於應用程序...使用MyISAM來處理需要參照完整性的任何事情都是瞬間失敗的。與此同時,它的文本搜索並非全部那高效。

基本上有兩種方法可以去。如果您發現您不需要真正的參照完整性,請考慮NoSQL數據存儲。 MongoDB是一個很棒的文檔存儲數據庫。

另一方面,如果您確實需要引用完整性,但也需要快速的索引全文搜索,則最好使用SphinxApache Solr爲全文搜索創建索引緩存。

無論哪種方式,我認爲MyISAM是一個遺留數據存儲。我不會在一個新項目中使用它。因人而異。

+4

堅持使用InnoDB和做這樣的事情,直到性能變得在這種情況下,切換到獅身人面像http://stackoverflow.com/questions/4732067/complex-query-for-recreating-fulltext問題 - 搜索效果上,InnoDB的/ 4732982#4732982。如果你認爲myisam更好閱讀本文http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 – 2012-01-05 22:38:44

3

MyISAM有幾個缺點 - 缺少事務支持,表級鎖,這使得它在讀取和寫入負載較重時非常緩慢。 MyISAM表的另一個不便之處 - 它們不是安全的,所以如果服務器意外關閉或斷電,您可能會丟失一些數據。但是MyISAM在某些查詢上速度非常快。

關於FullText搜索,我會建議使用InnoDB +外部搜索引擎,如Lucene或Sphinx,以便您可以從安全可靠的存儲引擎和快速全文查詢中受益。

對於快速啓動與InnoDB和獅身人面像,你可以參考http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/