这是建立另一个问题,
我尝试使用相同的策略组成第二个连接。我在我的 dev macbook pro 上运行 postgres 9.1.4。在此处查看此简化示例:
SELECT * FROM (
SELECT
post.*,
comment.*,
edit.*,
ROW_NUMBER() OVER (PARTITION BY post.id ORDER BY edit.date_applied DESC) AS rna,
ROW_NUMBER() OVER (PARTITION BY post.id ORDER BY comment.date_posted DESC) AS rnb
FROM
post
LEFT JOIN edit
ON post.id = edit.post_id
LEFT JOIN comment
ON post.id = comment.post_id
ORDER BY
post.id DESC
) AS q
WHERE rna = 1 AND rnb = 1;
所以我想要做的是提取所有帖子,包括最新的编辑和最新的评论。在我的数据库中,大约有 6000 个帖子,每个帖子大约 100 条评论,每个帖子可能有 10 个编辑。
现在,如果我使用其中一个联接而不是两者都运行查询,则查询运行得非常快(不到一分钟,没有我想要的那么快)。但是,如果我按照上面介绍的方式运行查询,postgres 会浏览我 SSD 上剩余的 14 GB,并在大约 5 分钟后放弃。
谁能解释为什么会发生这种情况?我希望这是我对 PARTITION BY 子句缺乏了解。从 SELECT 子句中删除连接的表并在子查询和外部查询中添加 LIMIT 没有任何改变。
谢谢阅读。