我试图得到一个帖子和评论的列表。
SELECT
theposts.id,
theposts.name,
(SELECT COUNT(*) FROM thecomments WHERE thecomments.post_id = theposts.id) AS comments
FROM theposts
问题是:我有2万条帖子和3千万条评论。查询速度非常慢。
如果我使用极限5,它可以在40秒内正常工作。但我需要一个2万个帖子的完整列表。
如何加快或调试此查询的任何提示?
服务器在我的MacBook8GB内存中运行。
最佳答案
我能想到的最好方法是创建一个索引。您需要一个thecomments(post_id)
的索引:
create index thecomments_postid on thecomments(post_id);
这应该会将查询计划更改为只进行索引扫描,并且执行得非常快。
我还认为这将比使用
group by
更快,这是另一种可能性:SELECT theposts.id, theposts.name, COUNT(*) as comment
FROM theposts join
thecomments
on thecomments.post_id = theposts.id
GROUP BY theposts.id;
关于mysql - mysql:简单子(monad)查询非常慢,因为有3000万行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22495261/