从 WordPress 上的 SELECT COUNT(*) 获取慢速查询
Getting slow query from SELECT COUNT(*) on WordPress
我有下面的查询,它给我的计数是 32,000。
SELECT COUNT(*)
FROM wp_term_relationships, wp_posts
WHERE wp_posts.ID = wp_term_relationships.object_id
AND post_status IN ('publish')
AND post_type IN ('ac_listings', 'ac_fields')
# Query_time: 3.324099 Lock_time: 0.000061 Rows_sent: 1 Rows_examined: 107818
# Rows_affected: 0 Bytes_sent: 67
但它经常出现在我的 MariaDB 慢查询日志中。我该如何解决这个问题?
这些是 WP 的默认索引。
PRIMARY KEY (`ID`),
INDEX `post_name` (`post_name`(191)),
INDEX `type_status_date` (`post_type`, `post_status`, `post_date`, `ID`),
INDEX `post_parent` (`post_parent`),
INDEX `post_author` (`post_author`)
PRIMARY KEY (`object_id`, `term_taxonomy_id`),
INDEX `term_taxonomy_id` (`term_taxonomy_id`)
P/S:我猜这可能是导致我的站点出现间歇性数据库连接错误的原因。我是 AWS EC2 上的 运行 微型 t2 和 4GB 内存,但我在网站上同时只有 8 个 people/Editors。
posts
需要以这两列开头的复合索引,这个顺序:
INDEX(post_status, post_type)
有了这个,我希望看到查询时间减少并且 Rows_examined: 107818
。仍然需要一些时间来处理一些帖子的所有 32K 关系。
另请参阅:WP Index Improvements ,尤其是对于使用 post_meta
.
的查询
我有下面的查询,它给我的计数是 32,000。
SELECT COUNT(*)
FROM wp_term_relationships, wp_posts
WHERE wp_posts.ID = wp_term_relationships.object_id
AND post_status IN ('publish')
AND post_type IN ('ac_listings', 'ac_fields')
# Query_time: 3.324099 Lock_time: 0.000061 Rows_sent: 1 Rows_examined: 107818
# Rows_affected: 0 Bytes_sent: 67
但它经常出现在我的 MariaDB 慢查询日志中。我该如何解决这个问题?
这些是 WP 的默认索引。
PRIMARY KEY (`ID`),
INDEX `post_name` (`post_name`(191)),
INDEX `type_status_date` (`post_type`, `post_status`, `post_date`, `ID`),
INDEX `post_parent` (`post_parent`),
INDEX `post_author` (`post_author`)
PRIMARY KEY (`object_id`, `term_taxonomy_id`),
INDEX `term_taxonomy_id` (`term_taxonomy_id`)
P/S:我猜这可能是导致我的站点出现间歇性数据库连接错误的原因。我是 AWS EC2 上的 运行 微型 t2 和 4GB 内存,但我在网站上同时只有 8 个 people/Editors。
posts
需要以这两列开头的复合索引,这个顺序:
INDEX(post_status, post_type)
有了这个,我希望看到查询时间减少并且 Rows_examined: 107818
。仍然需要一些时间来处理一些帖子的所有 32K 关系。
另请参阅:WP Index Improvements ,尤其是对于使用 post_meta
.