复合排序键与排序键

时间:2018-10-17 10:32:19

标签: amazon-web-services amazon-redshift

让我问其他有关redshift sortkey的问题。 我们计划使用WHERE语句中经常使用的列设置排序键。

到目前为止,我们系统的最佳组合似乎是: 分散的偶数+复合SORTKEY +压缩列(第一个SortKey列除外)

只是想知道哪种更好,对于我们的BI表来说,简单的SORTKEY或COMPOUND SORTKEY可以根据用户的分析进行多种查询。

例如,我们在几个查询的WHERE语句中根据频率设置复合排序键,如下所示。

COMPOUND SORTKEY
(
PURCHASE_DATE <-- set as first sort key since it's date column.
STORE_ID,
CUTOMER_ID,
PRODUCT_ID
)

但是有时在实际查询中只能查询“ PRODUCT ID”,不能与其他列出的排序键一起查询,也不能查询与COMPOUND KEY顺序不同的内容。

在那种情况下,我可以问一下'COMPOUND SORTKEY'可能是无用的还是简单的SORT KEY可以更有效...?

如果您能告诉我您的想法和经历,我将非常感激。

2 个答案:

答案 0 :(得分:1)

Amazon Redshift的简单规则是:

  • JOIN最常使用的列上使用DISTKEY
  • WHERE最常使用的列上使用SORTKEY

您正确的是,仅在PURCHASE_DATE中包含WHERE时才使用上述复合排序键。

一种替代方法是使用交错排序键,该键对许多列具有相同的权重,并且可以在WHERE中经常使用不同字段的地方使用。但是,交错排序键比VACUUM慢得多,并且几乎不值得使用。

因此,旨在在您的大多数 个查询上使用SORTKEY,但不要担心其他查询,除非您遇到一些特定的性能问题。

请参阅:Redshift Sort Keys - Choosing Best Sort Style | Hevo Blog

答案 1 :(得分:1)

您的复合排序键对我来说似乎很明智。重要的是要了解Redshift排序键是不是已使用或未使用的索引排序键用于将数据物理排列在磁盘上。

查询优化器通过在查询执行期间查看每个块的“区域映射”(最小和最大值)来“使用”排序键。所有列都会发生这种情况,无论它们是否在排序键中

复合排序键中的第二列在减少必须从磁盘扫描的数据方面仍然非常有效,特别是当列值是低基数时。

请参见前面的示例,以查询排序键的有效性:Is my sort key being used?

请查看我们的有效设计表格指南:"Amazon Redshift Engineering’s Advanced Table Design Playbook"。该指南讨论了交错排序键的正确用法,但请注意,只能在非常特殊的情况下使用它们。