我要使用ID和日期将自身连接到表上,以执行以下操作:
SELET t1.id, t1.date, SUM(whatwever)
FROM analytics.my_summary_by_day t1
LEFT JOIN analytics.my_summary_by_day t2
ON t1.id = t2.id
AND DATEDIFF(DAY,t1.date,t2.date)>=-30
AND DATEDIFF(DAY,t1.date,t2.date)<0
我应该像这样创建my_summary_table以便在上面的特定查询上获得更好的性能:
CREATE my_summary_table (
id int,
date datetime
) DISTKEY(id) SORTKEY(date);
答案 0 :(得分:1)
来自“选择最佳排序键” https://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-sort-key.html
- 如果您经常联接表,则将联接列指定为排序键和分发键。
- 这样做可以使查询优化器选择排序合并联接,而不是较慢的哈希联接。由于数据已经在联接键上进行了排序,因此查询优化器可以绕过排序合并联接的排序阶段。
请尝试以下操作,并查看您的EXPLAIN
计划,以查看是否获得合并联接。
CREATE my_summary_table (
id int,
date datetime
) DISTKEY(id) SORTKEY(id, date);