对于redshift中的ID和日期进行自我联接的最佳排序键和分区键是什么

时间:2018-08-09 21:27:26

标签: amazon-redshift

我要使用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);

1 个答案:

答案 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);