【问题标题】:How should I set up these tables for searching?我应该如何设置这些表进行搜索?
【发布时间】:2011-11-30 17:48:02
【问题描述】:

我的 PHP 网站是一个在线商店,拥有大约 5k 种产品。产品属于供应商、类别和可能的子类别。这些项目中的每一个都有一个名称,并且产品都有描述。

我们设置的搜索查询运行良好,但运行速度往往很慢。它们的范围在 0.20s 和 30s 之间(是的 30 秒)。我们已经疯狂地优化,我开始认为我们在这方面没有改进的空间,所以我们正在缓存它们,这让生活变得更轻松。

但是当它们运行时,它们仍然会杀死服务器,因为似乎是 MyISAM 附带的所有表锁定。

接着我的问题:有没有办法让我们使用 InnoDB(行级锁定)并且仍然保持 FULLTEXT?我们是否应该将我们的数据库移到异地并使用像 DB2 这样的服务?我们应该使用其他搜索引擎类型的软件吗?

非常感谢任何帮助:)

【问题讨论】:

    标签: mysql search locking innodb myisam


    【解决方案1】:

    InnoDB 现在确实有全文索引:http://blogs.innodb.com/wp/2011/07/innodb-full-text-search-tutorial/

    但由于它基本上是全新的,大多数 MySQL 安装还不支持它。

    标准的解决方法是拥有一个“镜像”MyISAM 表,其中包含具有全文索引的可搜索数据的副本。然后,您可以将原始 InnoDB 表与 MyISAM 副本连接起来,对 myisam 字段进行全文搜索,并在 innodb 副本上使用常规的其他“where”子句。

    在 InnoDB 表上使用适当的触发器,MyISAM 副本没有理由变得陈旧/不正确,或者您可以简单地按计划重新构建它们,这样您就有了一个与重新构建间隔匹配的陈旧窗口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2011-02-03
      • 1970-01-01
      • 2010-11-30
      • 2011-05-08
      • 1970-01-01
      相关资源
      最近更新 更多