【问题标题】:Mysql Search - InnoDB and transactions vs MyISAM for FULLTEXT searchMysql Search - 用于全文搜索的 InnoDB 和事务与 MyISAM
【发布时间】:2012-02-03 17:59:28
【问题描述】:

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

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

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

任何指针将不胜感激!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      有关 InnoDB 和 Sphinx 的快速入门,您可以参考 http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/

      【讨论】:

        【解决方案3】:

        这真的取决于应用程序... 将 MyISAM 用于需要参照完整性的任何事情都会立即失败。同时,它的文本搜索并不是所有那么高效。

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

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

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

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-14
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        相关资源
        最近更新 更多