mysql - Wordpress 一直在执行这个 SQL 查询?

标签 mysql sql wordpress

我的 Wordpress 网站流量不多,但我一直通过“SHOW PROCESS;”看到这个 SQL 查询。在 MySQL 中:

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 字段/地址栏中输入一堆垃圾时也是如此。 URL 在查询参数中被解析和转换,WP_Query 使用查询参数根据来自 URL 的参数从数据库中检索帖子。 WP_Query 将所有参数和请求转换为单个 SQL 查询,它用于与数据库通信以检索所要求的内容。这是一个数据库命中,您对此无能为力,很可能这是您问题中的 SQL 查询。

  • 任何自定义查询(new WP_Queryget_postsget_pages)都将转换为 SQL 查询以从中查询和检索帖子数据库

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

  • 用于显示附加到帖子的标签、术语和类别的函数使用 SQL 查询从数据库中检索标签/术语/类别

  • 大多数默认小部件使用自定义查询和/或使用 SQL 查询从数据库获取信息的函数

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

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

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

  • 相关或热门帖子部分还使用自定义查询,这些查询转换为 SQL 查询以检索相关帖子

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

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

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

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

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

编辑

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

关于mysql - Wordpress 一直在执行这个 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27762838/

相关文章:

mysql - 如何在mysql中根据时间间隔选择行?

具有特定基数的 sql 查询(多对多)

asp.net - INSERT INTO 语句中存在语法错误。在 Access 中运行而不是在 VB 中运行

javascript - 错误 : [jquery] function with wordpress

css - 无法使用 wp_enqueue_style 或其他方式更改版本

php - 我必须对多维关联数组进行排序,但是我的方法不起作用

mysql - mysql的dayofweek内存昂贵吗...或者我不应该关心?

sql - Rails 排序方法;名为 :order 的列

wordpress - 将 Wordpress 与 Symfony 集成

mysql - 如何用空白替换重复的列值而不删除 MySql 中的整行?