从 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.

的查询