mysql - 我应该如何设置这些表来进行搜索?

标签 mysql search locking innodb myisam

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

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

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

那么我的问题是:有没有办法让我们在使用 InnoDB(行级锁定)的同时仍然维护 FULLTEXT?我们是否应该将数据库移至异地并使用像 DB2 这样的服务?我们是否应该使用其他搜索引擎类型的软件?

非常感谢任何帮助:)

最佳答案

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

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

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

通过 InnoDB 表上的适当触发器,MyISAM 副本没有理由变得陈旧/不正确,或者您可以简单地按计划重建它们,以便获得与重建间隔相匹配的陈旧窗口。

关于mysql - 我应该如何设置这些表来进行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330500/

相关文章:

mongodb - mongodb写锁行为

java - 重新连接后 Curator 互斥锁失败

mysql - 如何在不丢失日期的情况下将 varchar 列类型转换为日期类型

php - MySQL 中的负索引长度

search - 有没有办法在初始化后使用谓词修改获取的结果?

java - Lucene 按数值搜索

mysql - 在phpmyadmin中搜索和替换列

java - 在没有 IllegalMonitorStateException 的情况下解锁 ReentrantLock

mysql - 如何在 MYSQL 中通过另一列选择具有 MAX(列值)、PARTITION 的行?

mysql - 在 BeagleBone 上安装 Mysql 到 Debian 时出现错误