Mysql搜索 - InnoDB和事务与MyISAM进行FULLTEXT搜索

时间:2012-01-05 22:04:42

标签: mysql search full-text-search innodb myisam

我目前正在研究为php项目提供高级搜索的最佳方法。

我已将其缩小为使用FULLTEXT搜索,而不是使用LIKE在表格行中查找匹配的字符串。但是,要做到这一点,似乎我需要牺牲使用InnoDB引擎,这将使我失去事务和表关系的ACIDity。

是否真的值得使用MYISAM mysql引擎,或者是否有更好的方法来提供搜索功能。

任何指针都将不胜感激!

3 个答案:

答案 0 :(得分:8)

这实际上取决于应用程序......将MyISAM用于需要参照完整性的任何事情都是即时失败。与此同时,它的文字搜索并非所有效率高。

基本上,有两种方法可以去。如果您发现不需要真正的参照完整性,请考虑使用NoSQL数据存储区。 MongoDB是一个很棒的文档存储数据库。

另一方面,如果您确实需要参照完整性,但也需要快速索引的全文搜索,那么最好使用SphinxApache Solr来创建索引缓存全文检索。

无论哪种方式,我认为MyISAM是一个遗留数据存储区。我不会在新项目中使用它。 YMMV。

答案 1 :(得分:4)

MyISAM有几个缺点 - 缺少事务支持,表级锁定使得它在繁重的读写加载类型中非常慢。 MyISAM表的另一个不便之处 - 它们不是崩溃安全的,因此在服务器意外关闭或断电时可能会丢失一些数据。但是MyISAM在某些查询上非常快。

关于FullText搜索,我建议使用InnoDB +外部搜索引擎,如Lucene或Sphinx,这样您就可以从安全可靠的存储引擎和快速全文查询中受益。

要快速启动InnoDB和Sphinx,您可以参考http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/

答案 2 :(得分:3)

MySQL 5.6支持InnoDB的FULLTEXT索引(2013年2月发布)。参见:

http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html