這是建立了另一個問題,多個左連接到每個返回單列,未完成
Left join and only last row from right
我在哪裏嘗試撰寫使用相同的策略,第二個連接。我在我的開發人員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添加LIMIT並不會改變任何內容。
感謝您的閱讀。
非常好。快速,並且幫助我理解很有意義。謝謝! – 2013-02-27 20:52:45
使用PostgreSQL'DISTINCT ON'可以簡化內部查詢。整個查詢可以更快。 – 2013-02-27 20:55:05