Redshift:“IN 子句”中的最大项目数?
Posted
技术标签:
【中文标题】Redshift:“IN 子句”中的最大项目数?【英文标题】:Redshift: Max items within "IN clause"? 【发布时间】:2016-07-19 07:45:16 【问题描述】:我有一个类似的查询:
SELECT count(id), pro.country_code
FROM profiles AS pro
WHERE id IN (SELECT profile_id FROM reports)
GROUP BY pro.country_code;
我的问题:
您可以在 Redshift IN CLAUSE 中使用多少项?每次执行外部查询时,存储实际 id 而不是 sub-sql 语句必须更快,对吧?
【问题讨论】:
子select返回的item数没有限制。至少在 Postgres 中没有,因为亚马逊是一个分支(尽管来自一个非常旧的版本),所以也不应该有任何限制。 【参考方案1】:据我所知,没有限制,但如果你要带很多数据,你可以使用存在。
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;
应该会更快
你也可以用 intersect 代替 in
【讨论】:
根据这篇帖子,执行是一样的:***.com/questions/50800120/…【参考方案2】:正如“用户”已经说过的,您的最佳表现将是使用 WHERE EXISTS 子句和子查询。既然您提到性能是一个重要的考虑因素,我还应该指出,更重要的性能因素是您的表分布。为了使其表现良好,您需要仔细检查两个表是否都有列“profile_id”作为分布键,并且两个表都使用相同的数据类型声明了该列。
【讨论】:
以上是关于Redshift:“IN 子句”中的最大项目数?的主要内容,如果未能解决你的问题,请参考以下文章