これは別の質問に基づいています。
同じ戦略を使用して2番目の結合を作成しようとする場所。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;
だから私がこれでやろうとしているのは、最新の編集と最新のコメントですべての投稿を引っ張ることです。私のDBには約6000の投稿があり、投稿ごとに約100のコメントがあり、投稿ごとにおそらく10の編集があります.
ここで、両方ではなくいずれか一方を使用してクエリを実行すると、クエリは非常に高速に実行されます (1 分未満で、思ったほど速くはありません)。しかし、上記のようにクエリを実行すると、postgres は SSD の残りの 14 GB を処理し、約 5 分後に終了します。
なぜこれが起こるのか、誰か説明できますか?PARTITION BY 句に関する私の理解不足だと思います。結合されたテーブルを SELECT 句から削除し、サブクエリと外部クエリの両方に LIMIT を追加しても、何も変わりませんでした。
読んでくれてありがとう。