This文档描述了redshift中的密钥分发,如下所示:
根据一列中的值分配行。该 leader节点将尝试在同一节点上放置匹配值 切片。如果在连接键上分发一对表,则 leader节点根据值并置切片上的行 在连接列中,以便匹配来自公共列的值 物理存储在一起。
我想知道密钥分配是否还有助于优化相等过滤器。我的直觉说它应该但是在任何地方都没有提到。
另外,我看到了关于排序键的documentation,它表示要选择排序键:
查找范围过滤器和相等过滤器中使用的列。
这使我感到困惑,因为明确提到sort-keys是优化相等过滤器的一种方法。
我问这个是因为我已经有一个候选排序键,我将在其中进行范围查询。但我也希望在另一列上使用快速相等过滤器,这在我的情况下是一个很好的分发键。
答案 0 :(得分:1)
过滤分发密钥是一个非常糟糕的主意,特别是如果您的表/群集很大。
原因是过滤器可能只在一个切片上运行,实际上在没有MPP的情况下运行。
例如,如果您有一个" added_date"的dist键,您可能会发现前一周的所有添加日期都在一个切片上。
然后,您将使大多数查询过滤最近的added_date范围,并且这些查询将被集中并将使该一个切片饱和。
答案 1 :(得分:1)
简单的规则是:
对SORTKEY和DISTKEY使用相同的字段实际上有好处。来自Choose the Best Sort Key:
如果经常加入表格,请将加入列指定为排序键和分配键。
这使查询优化器能够选择排序合并连接而不是较慢的散列连接。由于数据已经在连接键上排序,因此查询优化器可以绕过排序合并连接的排序阶段。
随意进行一些性能测试 - 创建表的几个不同版本,并使用INSERT或SELECT INTO来填充它们。然后,尝试常见查询以查看它们的执行情况。