Mysql 使用子查询加速联接
在wordpress数据库中,我想从至少写过五篇文章的作者中选择所有已发表的文章,并用他们的登录名替换作者的ID。我通过选择所有已发表的文章来实现这一点,用Mysql 使用子查询加速联接,mysql,Mysql,在wordpress数据库中,我想从至少写过五篇文章的作者中选择所有已发表的文章,并用他们的登录名替换作者的ID。我通过选择所有已发表的文章来实现这一点,用JOIN语句过滤两次,其中一个加入子查询的结果集,以获得那些拥有五篇以上文章的作者 下面是代码: SELECT posts.post_author, users.user_login, posts.post_content, posts.post_date FROM zwzt_wp.zwzt_wp_posts AS posts INNER
JOIN
语句过滤两次,其中一个加入子查询的结果集,以获得那些拥有五篇以上文章的作者
下面是代码:
SELECT posts.post_author, users.user_login, posts.post_content, posts.post_date
FROM zwzt_wp.zwzt_wp_posts AS posts
INNER JOIN zwzt_wp.zwzt_wp_users AS users
ON posts.post_author=users.id
INNER JOIN (
SELECT posts1.post_author, COUNT(*) AS count
FROM zwzt_wp.zwzt_wp_posts AS posts1
WHERE posts1.post_type='post' AND posts1.post_status='publish'
GROUP BY posts1.post_author
HAVING count > 5
ORDER BY posts1.post_author
) as regular_users
ON posts.post_author=regular_users.post_author
WHERE posts.post_type='post' AND posts.post_status='publish'
ORDER BY posts.post_author, posts.post_date DESC;
对我来说,这看起来有点臃肿,而且运行时间很长,特别是因为我在
帖子上运行了两个select查询。有没有更有效的方法来实现这一点?我认为没有多少方法可以简化查询。但是,你可以做一些事情:
- 从子查询中删除排序依据
zwzt\u wp\u帖子上创建索引(帖子类型、帖子状态、帖子作者)
用户(id)
上有索引zwzt\u wp\u帖子(post\u author)
上也有索引如果在查询中经常使用这种类型的信息,您可能希望设置触发器以在用户级别维护计数。我认为您无法简化查询。但是,你可以做一些事情:
- 从子查询中删除排序依据
- 在
zwzt\u wp\u帖子上创建索引(帖子类型、帖子状态、帖子作者)
- 确保在
上有索引用户(id)
- 确保你在
上也有索引zwzt\u wp\u帖子(post\u author)
如果在查询中经常使用这种类型的信息,您可能希望设置触发器以在用户级别维护计数。回答得好+伟大的答案+1.