我该如何设置这些表进行搜索?

时间:2011-11-30 17:48:03

标签: mysql search locking innodb myisam

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

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

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

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

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:1)

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

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

标准解决方法是使用“镜像”MyISAM表,其中包含具有全文索引的可搜索数据的副本。然后,您将对MyISAM副本加入原始InnoDB表,在myisam字段上进行全文搜索,并定期在innodb副本上使用其他“where”子句。

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