我试图得到一个帖子和评论的列表。

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/

10-09 21:07