我有两个疑问如下。第一个有一个嵌套选择。第二个使用 group by 子句。
select
posts.*,
(select count(*) from comments where comments.post_id = posts.id and comments.is_approved = 1) as comments_count
from
posts
select
posts.*,
count(comments.id) comments_count
from
posts
left join comments on
comments.post_id = posts.id
group by
posts.*
根据我的理解,第一个查询更糟糕,因为它必须对帖子中的每条记录进行选择,而第二个查询则不需要。
这是真的还是假的?
最佳答案
与所有性能问题一样,您应该使用数据测试系统的性能。
但是,我希望第一个在正确的索引下表现更好。正确的索引:
select p.*,
(select count(*)
from comments c
where c.post_id = p.id and c.is_approved = 1
) as comments_count
from posts p
是评论(post_id,is_approved)
。
MySQL 通过执行文件排序来实现group by
。该版本保存了所有数据的文件排序。我的猜测是这会比第二种方法更快。
请注意:group by posts.*
不是有效的语法。我认为这只是为了说明目的。
关于mysql - 嵌套查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271811/