php - 搜索多种内容类型

标签 php mysql performance wordpress

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

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

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

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

最佳答案

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

因此,我会尝试执行两个非常简单的查询(每个表一个),然后使用 PHP 代码对它们进行合并/排序。

如果您的数据集非常大,或者如果您的虚拟主机很糟糕,那么您的 PHP 脚本可能会耗尽内存……然后,并且只有在那时,开始四处寻找正确的方法才是个好主意在 MySQL 中执行此操作(我怀疑临时表可能是正确的查找位置)。

但是,如果您遇到 PHP 的性能限制,那么我怀疑您在 MySQL 中执行的任何操作实际上会变得更慢,您将不得不更改数据库结构以获得良好的性能。一种方法是保留现有的表结构,但要有第三个表,其中包含来自所有表的重复数据 - 仅用于搜索,以及一些代码以保持所有内容同步。

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

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

关于php - 搜索多种内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11993943/

相关文章:

c++ - AMP C++ 加速体积计算

PHP SESSION 数据在本地主机上的 WAMPserver 2.0 页面加载之间丢失

php - 只允许在数据库中输入某些字符

mysql - Tomcat 上的 Grails war 部署要求 hsql 驱动程序而不是 mysql

PHP 打印大量信息时速度很慢

performance - 在 Matlab 中有效计算成对平方欧氏距离

php - 如何在PHP中使用Ajax上传图片?

javascript - 使用 Post 的 PHP 表单。错误 : Undefined array key. 但是当我使用 get 时它可以工作。 (w3schools 示例)

mysql - SQL Group By 多个类别

php - 需要帮助来比较 PHP 和 DB 的值(value),$_POST 不起作用..?