2016-07-19 39 views
1

我有這樣一個查詢:紅移:「IN子句」中的最大項?

SELECT count(id), pro.country_code 
FROM profiles AS pro 
WHERE id IN (SELECT profile_id FROM reports) 
GROUP BY pro.country_code; 

我的問題:

有多少項目可以在紅移使用條款?每次存儲實際的id而不是子sql語句的速度要快得多,對嗎?

+0

對子選擇返回的項目數沒有限制。至少不是在Postgres中,亞馬遜是一個分支(雖然來自一個真正的舊版本),所以不應該有任何限制。 –

回答

2

從我所知道的沒有限制,但如果你要帶來很多數據,你可以使用存在。

SELECT count(id), 
pro.country_code 
FROM profiles AS pro 
WHERE exists (SELECT profile_id FROM reports where pro.id=reports.profile_id) 
GROUP BY pro.country_code; 

它應該是更加更快

您也可以使用相交,而不是在

0

爲「用戶」已經說過的,你最好的表現會與一個WHERE EXISTS子句和子查詢。既然你提到性能是一個重要的考慮因素,我還應該指出更重要的性能因素就是你的表格分佈。爲了使其運行良好,您需要仔細檢查兩個表是否具有「profile_id」列作爲分配鍵,並且兩個表都使用相同的數據類型聲明瞭該列。