2016-07-19 42 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”列作为分配键,并且两个表都使用相同的数据类型声明了该列。