Wordpress 一直在执行此 SQL 查询?

Wordpress is executing this SQL query all the time?

我的 Wordpress 网站流量不多,但我一直在 MySQL 中通过 "SHOW PROCESS;" 看到此 SQL 查询:

SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID
FROM wp_posts
WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish')
ORDER BY wp_posts.post_date DESC LIMIT 0, 10

我已经关闭所有插件并更新到最新的 Wordpress 版本 (4.1)。我还使用 WordPress (2014) 内置的默认主题。

每当我运行 "SHOW PROCESS;" 时,我都能看到至少有 3-8 个查询在运行,有时甚至更多,比如在流量很低(甚至空闲)时有 10+ 个查询在运行。

我问是因为 MySQL 使用了很多 CPU 资源,我想知道为什么这个查询在我运行 "SHOW PROCESS" 时每秒多次出现。

您所看到的是正常的和预期的,对此您无能为力。页面加载时最多有 30 SQL 个查询是正常的。更多的应该检查。

那么所有这些查询是什么?它们来自哪里?

  • 每个页面加载时,都会执行主查询,即使在 404 页面上或当一堆垃圾被输入 URL field/address吧。 URL 在查询参数中被解析和转换,WP_Query 使用这些参数根据来自 URL 的参数从数据库中检索 post。 WP_Query 将所有参数和请求转换为单个 SQL 查询,它用于与数据库通信以检索所要求的内容。这是一个数据库命中,您对此无能为力,这很可能是您问题中的 SQL 查询。

  • 任何自定义查询(new WP_Queryget_postsget_pages)转换为 SQL 查询以查询和检索 posts 来自数据库

  • 您的导航菜单使用转换为 SQL 查询的函数来构造主导航菜单

  • 用于显示附加到 post 的标签、术语和类别的函数使用 SQL 查询从 DB

    中检索 tags/terms/categories
  • 大多数默认小部件使用自定义查询 and/or 函数,这些函数使用 SQL 查询从数据库中获取信息

  • 一些条件标签使用 SQL 查询来检查数据库中条目的条件

  • 在页面上,主查询进行额外的 SQL 查询以检索用于特定页面的页面模板

  • Wordpress 运行s 一些在后台使用 SQL 查询的进程

  • 相关或流行的 post 部分还使用自定义查询,这些查询转换为 SQL 查询以检索相关的 posts

这些只是每次页面加载时自动命中数据库的一些内容,有些可以控制,有些则不能,但归根结底,如果没有这些查询,您将不会有视觉体验或您网页中的功能

我建议您在测试安装中下载并安装 Query Monitor。不要 运行 在生产站点上使用此工具,因为信息会直接打印到屏幕上。该工具打印出每次页面加载时的所有 queries/db 命中以及执行这些查询所花费的时间。有了这个,您将很好地了解正在发生的事情以及哪些功能命中了数据库。

正如我已经说过的,在单个页面加载中最多有 30 SQL 个查询(数据库命中)是正常的。更多这应该被检查,这通常可以通过优化你的代码来纠正

要记住和考虑的最重要因素是查询量与执行查询所花费的实际时间。这应该是您决定走哪条路线的最重要因素。我在过去曾多次展示过,四个构造良好的查询有时比您希望一次完成所有操作的一个查询快 10 倍。

此外,在无法简化的大体积操作上正确使用缓存和瞬态。您将在某个阶段 运行 进入一个查询,无论您尝试什么,都会产生 70 db 命中率。

编辑

补充一下,流量不会增加或减少给定页面上默认 运行 的 SQL 查询的数量。 SQL 查询的数量完全由 运行 完全加载页面

的进程决定