gpt4 book ai didi

mysql:简单的子查询非常慢,因为有 3000 万行

转载 作者:行者123 更新时间:2023-11-29 04:21:31 25 4
gpt4 key购买 nike

我正在尝试获取每个帖子和评论计数的列表。

SELECT
theposts.id,
theposts.name,
(SELECT COUNT(*) FROM thecomments WHERE thecomments.post_id = theposts.id) AS comments
FROM theposts

问题是:我有 2 万个帖子和 3000 万条评论。查询速度极慢。

如果我使用 LIMIT 5,它会在大约 40 秒内正常工作。但我需要获得包含 20k 个帖子的完整列表。

关于如何加速或调试此查询的任何提示?

服务器在我的 Macbook 8gb 内存中运行。

最佳答案

我能想到的最好的方法是创建一个索引。您需要在 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:简单的子查询非常慢,因为有 3000 万行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22495261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com