2011-11-30 101 views
0

我的PHP网站是一个网上商店,约5k个产品。产品属于供应商,类别和可能的子类别。这些项目中的每一个都有一个名称,产品有说明。我应该如何设置这些表格进行搜索?

我们设置的搜索查询功能非常好,但运行速度很慢。它们的范围在0.20s和30s之间(是30秒)。我们已经非常疯狂地进行了优化,并且我开始认为我们没有足够的空间去改进这个方面,所以我们正在缓存它们,这让生活变得更容易。

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

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

任何帮助是极大的赞赏:)

回答

1

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

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

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

在InnoDB表上有适当的触发器,没有理由让MyISAM副本变得陈旧/不正确,或者你可以简单地重建它们,以便得到一个与重建间隔相匹配的陈旧窗口。