Redshift:基于密钥的分发是否优化了相等过滤器?

时间:2017-11-14 14:28:29

标签: amazon-web-services amazon-redshift

This文档描述了redshift中的密钥分发,如下所示:

  

根据一列中的值分配行。该   leader节点将尝试在同一节点上放置匹配值   切片。如果在连接键上分发一对表,则   leader节点根据值并置切片上的行   在连接列中,以便匹配来自公共列的值   物理存储在一起。

我想知道密钥分配是否还有助于优化相等过滤器。我的直觉说它应该但是在任何地方都没有提到。

另外,我看到了关于排序键的documentation,它表示要选择排序键:

  

查找范围过滤器和相等过滤器中使用的列。

这使我感到困惑,因为明确提到sort-keys是优化相等过滤器的一种方法。

我问这个是因为我已经有一个候选排序键,我将在其中进行范围查询。但我也希望在另一列上使用快速相等过滤器,这在我的情况下是一个很好的分发键。

2 个答案:

答案 0 :(得分:1)

过滤分发密钥是一个非常糟糕的主意,特别是如果您的表/群集很大。

原因是过滤器可能只在一个切片上运行,实际上在没有MPP的情况下运行。

例如,如果您有一个" added_date"的dist键,您可能会发现前一周的所有添加日期都在一个切片上。

然后,您将使大多数查询过滤最近的added_date范围,并且这些查询将被集中并将使该一个切片饱和。

答案 1 :(得分:1)

简单的规则是:

  • 将DISTKEY用于最常加入的列
  • 对WHERE语句中最常用的字段使用SORTKEY

对SORTKEY和DISTKEY使用相同的字段实际上有好处。来自Choose the Best Sort Key

  

如果经常加入表格,请将加入列指定为排序键和分配键。

     

这使查询优化器能够选择排序合并连接而不是较慢的散列连接。由于数据已经在连接键上排序,因此查询优化器可以绕过排序合并连接的排序阶段。

随意进行一些性能测试 - 创建表的几个不同版本,并使用INSERT或SELECT INTO来填充它们。然后,尝试常见查询以查看它们的执行情况。