2012-01-05 83 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/