【发布时间】:2019-04-05 01:39:27
【问题描述】:
单个表上有一个不同的查询
select distinct d, e, f, a, b, c from t where a = 1 and e = 2;
列 a、b、c 中不同值的数量很高(高列基数),列 d、e、f 是低基数列。我的数据在 S3 中是 ORC 格式,我在 Athena 中有外部表和 Redshift 光谱指向同一个文件。
在 athena 中运行上述查询时,它会在几秒钟内返回,而在红移光谱中则需要几分钟。
但是当我将 col f 移到选择列表的末尾时,它在 Redshift 光谱中也可以正常工作。这只发生在这个特定的列上,我的意思是在最后移动 d 或 e 没有任何区别,即它们运行的时间更长。 col f 和其他列一样是 varchar 列,该列的最大长度为 30 个字节。
两个问题
(a) 任何关于将 col f 移动到列表末尾使其运行得更快而将其置于其间使其变慢的特殊行为的见解或指针
(b) 是否有推荐的 SQL 最佳实践在 distinct 或 group by 语句中按列基数的降序列出列?如果将较低基数的列放在最前面或混合排列,执行时间会有所不同吗?
【问题讨论】:
-
相关:cybertec-postgresql.com/en/speeding-up-group-by-in-postgresql(适用于 Postgres,但也可能适用于 Redshift)
-
谢谢,所以这建议把不同的列放在第一位——这样会得到更快的结果。
-
“分组依据”而不是使用 distinct 的行为是否相同?
标签: sql amazon-redshift