gpt4 book ai didi

sql - 在 postgres 中用 subselect 计数真的很慢

转载 作者:行者123 更新时间:2023-11-29 14:08:24 25 4
gpt4 key购买 nike

我有这个问题:

SELECT c.name, COUNT(t.id)
FROM Cinema c
JOIN CinemaMovie cm ON cm.cinema_id = c.id
JOIN Ticket t ON cm.id = cinema_movie_id
WHERE cm.id IN (
SELECT cm1.id
FROM CinemaMovie cm1
JOIN Movie m1 ON m1.id = cm1.movie_id
JOIN Ticket t1 ON t1.cinema_movie_id = cm1.id
WHERE m1.name = 'Hellboy'
AND t1.time >= timestamp '2019-04-18 00:00:00'
AND t1.time <= timestamp '2019-04-18 23:59:59' )
GROUP BY c.id;

问题是当表有大约 2000 万行时,这个查询运行得非常慢(超过 1 分钟)。据我了解,问题似乎出在内部查询上,因为它需要很长时间。另外,我有外键的所有索引。我错过了什么?

另请注意,当我仅按名称选择(我省略了日期)时,一切都需要 10 秒。

编辑我想做的是根据电影名称和票上的时间戳计算每个电影院名称的票数。

最佳答案

我不明白你为什么要使用子查询。这是否符合您的要求?

SELECT c.name, COUNT(t.id)
FROM Cinema c JOIN
CinemaMovie cm
ON cm.cinema_id = c.id JOIN
Ticket t
ON cm.id = cinema_movie_id JOIN
Movie m
ON m.id = cm.movie_id
WHERE m.name = 'Hellboy' AND
t.time >= '2019-04-18'::timestamp and
t.time < '2019-04-19'::timestamp
GROUP BY c.id, c.name;

关于sql - 在 postgres 中用 subselect 计数真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55976449/

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