我目前正在研究为php项目提供高级搜索的最佳方法。
我已将其缩小为使用FULLTEXT搜索,而不是使用LIKE在表格行中查找匹配的字符串。但是,要做到这一点,似乎我需要牺牲使用InnoDB引擎,这将使我失去事务和表关系的ACIDity。
是否真的值得使用MYISAM mysql引擎,或者是否有更好的方法来提供搜索功能。
任何指针都将不胜感激!
答案 0 :(得分:8)
这实际上取决于应用程序......将MyISAM用于需要参照完整性的任何事情都是即时失败。与此同时,它的文字搜索并非所有效率高。
基本上,有两种方法可以去。如果您发现不需要真正的参照完整性,请考虑使用NoSQL数据存储区。 MongoDB是一个很棒的文档存储数据库。
另一方面,如果您确实需要参照完整性,但也需要快速索引的全文搜索,那么最好使用Sphinx或Apache 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月发布)。参见: