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 子句”中的最大项目数?的主要内容,如果未能解决你的问题,请参考以下文章

“In”子句可以处理的项目的最大限制

MongoDB 的 $in 子句是不是有参数数量的最大限制

MongoDB 的 $in 子句是不是有参数数量的最大限制

Netezza 中可以传递 IN 子句的最大参数

按mysql中select语句“in”子句中的值顺序排序

SQL,试图摆脱大 IN 子句