1
可以想象我有類似以下的查詢:如何將多個子查詢優化到同一數據集
SELECT
u.ID,
(SELECT
COUNT(*)
FROM
POSTS p
WHERE
p.USER_ID = u.ID
AND p.TYPE = 1
) AS interesting_posts,
(SELECT
COUNT(*)
FROM
POSTS p
WHERE
p.USER_ID = u.ID
AND p.TYPE = 2
) AS boring_posts,
(SELECT
COUNT(*)
FROM
COMMENTS c
WHERE
c.USER_ID = u.ID
AND c.TYPE = 1
) AS interesting_comments,
(SELECT
COUNT(*)
FROM
COMMENTS c
WHERE
c.USER_ID = u.ID
AND c.TYPE = 2
) AS boring_comments
FROM
USERS u;
(希望這是正確的,因爲我只是想出了它,並沒有測試)
我嘗試計算用戶擁有的有趣和無聊的帖子和評論的數量。
現在,這個查詢的問題是,我們有兩個順序掃描posts
和comments
表,我不知道是否有辦法避免這種情況?
我大概可以LEFT JOIN
users
表的帖子和評論,並做了一些聚合,但它會在聚合之前產生大量的行,我不知道如果這是一個好方法。
您可以使用解釋來獲得查詢成本的近似概念,並使用小的更改進行優化。 –
是的,嘗試兩個LEFT JOIN +(條件)聚合。 – wildplasser
@wildplasser我使查詢有點複雜。我與左連接的問題是,它會在聚合之前生成用戶*註釋*發佈行,這可能是很多行,並且可能會減慢查詢速度。 – JustMichael