我正在测试这种情况的性能:
有一个表名为带有列id和名称的类,有10000条记录。有一个包含列id,body,category_id的表格帖子有百万行,其中每一行被随机分配到其中一个类别。 posts中的categories_id是指向categories.id的外键,两个表中名为id的列都是主键。在这些列上创建索引。
现在,我的目标是获取每个类别的帖子数量列表。
为什么子查询比加入更快?我使用了h2和mysql,虽然没有太多的性能调优,可能也没有理解某些事情,并且两者都是一致的,因为连接或多或少比子查询慢。
这些是查询:
使用子查询:
SELECT categories.name,
(SELECT COUNT(posts.id) FROM posts WHERE posts.categories_id = categories.id) as postCount
FROM categories
加入:
select categories.name, count(posts.id) from categories
left join posts on posts.categories_id=categories.id
group by categories.id