1

这是我一直在努力解决的一个问题的概括。我的情况是我有一个 WordPress 网站,其中包含多种“帖子类型”(例如文章、博客帖子、产品等)。按照现在的惯例,我想在不同的类别中显示每种帖子类型的搜索结果。

我遇到的问题是构建搜索。我应该为每种帖子类型运行单独的数据库查询,还是应该运行一个大查询并通过 PHP 将所有内容分开?我倾向于倾向于后者,但我遇到的问题是分页。我可能不必LIMIT在查询上设置任何内容,因为如果我有来自一种帖子类型的多个匹配项,则搜索不会返回来自其他帖子类型的任何结果。

那么,从性能和一般最佳实践的角度来看,最好是有一个没有LIMIT子句的大查询,还是为每个搜索运行多个查询?

注意:这类似于我不久前在 WordPress Stack Exchange 网站上提出的问题。我当时接受了多查询解决方案,但我仍然对此不确定。

4

2 回答 2

1

以我的经验,通常最好让数据库做尽可能少的工作,让 PHP 做大部分繁重的工作。它通常更快。

所以,我会尝试做两个非常简单的查询(每个表一个),然后用 PHP 代码合并/排序它们。

如果您的数据集非常大,或者您的网络主机很垃圾,那么您的 PHP 脚本可能会耗尽内存……然后,只有这样,开始寻找正确的方法是个好主意在 MySQL 中(我怀疑临时表可能是正确的查看位置)。

但是如果你遇到了 PHP 的性能限制,那么我怀疑你在 MySQL 中所做的任何事情实际上都会变得更慢,你必须改变你的数据库结构以获得良好的性能。一种方法是保留现有的表结构,但有第三个表,其中包含所有表中的重复数据 - 仅用于搜索,以及一些代码以使所有内容保持同步。

例如,我们有一个表格,其中包含网站用户上传的每个 pdf 文档,我们有另一个表格,其中包含任何文档中的每个单词,以及它们之间的多对多链接表。

每当上传一个新的 pdf 时,我们都会找到其中的每个单词,并将记录插入到链接表中。这样,我们实际上不必在 PDF 文档中进行搜索,我们只搜索经过结构化以允许快速搜索的索引表。

于 2012-08-16T19:19:55.580 回答
0

对于这种类型的搜索,我愿意使用Solr之类的解决方案进行索引。您可以使用此类解决方案做很多事情,并且它们与以通用方式搜索的用户类型非常匹配。

于 2012-08-21T12:56:09.550 回答