我的PHP网站是一个拥有约5k产品的在线商店。产品属于供应商,类别,可能属于子类别。每个项目都有一个名称,产品有描述。
我们设置的搜索查询运行得非常好,但往往运行速度很慢。它们的范围在0.20秒到30秒之间(是30秒)。我们已经像疯了一样进行了优化,我开始认为我们在这方面没有改进的余地,所以我们正在缓存它们,这让生活变得更加轻松。
但是当他们运行时,他们仍在杀死服务器,因为似乎是MyISAM附带的所有表锁定。
关于我的问题:我们有没有办法使用InnoDB(行级锁定)并仍然保持FULLTEXT?我们应该将我们的数据库移到异地并使用像DB2这样的服务吗?我们应该使用其他一些搜索引擎类型的软件吗?
非常感谢任何帮助:)
答案 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>