【问题标题】:Redshift Sort Keys For Joins连接的 Redshift 排序键
【发布时间】:2018-10-30 09:09:33
【问题描述】:

我已经阅读了各种帖子,但仍然不清楚。使用星型模式,我认为如果我从维度表(例如 d_article)驱动查询,我最终会得到一组用于查询/探测主要事实表的 SK(sk_article)。因此,在该暗表的 Where 子句中常​​用的字段上设置排序键是有意义的。

接下来...这是我找不到示例或答案的内容...我应该在事实表的排序键中包含 sk_article 吗?更具体地说,我是否应该使用所有不同的 SK 创建一个交错排序键,因为我们并不总是使用相同的键来加入事实表?

我没有看到仅提及在联接中包含排序键。

https://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-sort-key.html

Amazon Redshift Foreign Keys - Sort or Interleaved Keys

【问题讨论】:

    标签: amazon-redshift


    【解决方案1】:

    红移排序键

    排序键仅用于排序目的,而不是用于连接目的。可以有多个列定义为排序键。可以使用这些列对存储在表中的数据进行排序。查询优化器在确定最佳查询计划时使用此排序有序表。

    另外,正如托尼所说,

    排序键主要用于优化区域地图的有效性(有点像 BRIN 索引)并启用范围限制扫描。它们在大多数维度表上并不是很有用,因为维度表通常很小。排序键唯一可以帮助提高连接性能的情况是,如果您为合并连接设置了所有内容 - 这通常只对大型事实到事实表连接有意义。交错键更像是一种特殊情况的排序键,对任何连接都没有帮助。

    每种类型的键都有特定的用途。 This 可能适合您阅读。

    对于联接表、事实表和维度表,您应该使用分布键。

    Redshift 分发密钥(DIST 密钥)

    它决定了数据在 Redshift 中的存储位置。集群从根本上跨计算节点存储数据。当大量数据存储在单个节点上时,查询性能会受到影响。 Here 非常适合您阅读。

    我希望这能回答你的问题。

    我很好 video 会话在这里,可能对理解 SORT VS DIST Key 很有帮助。

    【讨论】:

    • "排序键仅用于排序目的,不用于连接目的。" >>是的,但我们仍在调查事实表中的记录子集。为什么不使用从 dim 表中检索到的 SK 来过滤事实表中的记录?我的意思是,如果我取出这些 SK 的列表并将它们放入事实表的 Where 子句中而不进行连接,那么在该 SK 列上有一个排序键会加快检索速度,对吗?
    • 到那时是的,它会有所帮助,因为该列已排序,因此会加快速度,但主要目的是排序。虽然分配键确实对联接有技巧,但您必须为暗表正确分配数据,以最大限度地减少 Redshift 在执行联接查询时将数据从一个节点移动到另一个节点。
    • 是的,我了解使用分发密钥的重要性。但就排序键而言,听起来像是在我的事实表中的 SK 字段上放置交错排序键应该加快速度(理论上)?
    • 排序键主要用于优化区域地图的有效性(有点像 BRIN 索引)并启用范围限制扫描。它们在大多数维度表上并不是很有用,因为维度表通常很小。排序键唯一可以帮助提高连接性能的情况是,如果您为合并连接设置了所有内容 - 这通常只对大型事实到事实表连接有意义。交错键更像是一种特殊情况的排序键,对任何连接都没有帮助。
    • @TonyGibbs 谢谢你的意见。是的,我同意你的观点,编辑我的答案并添加这些额外信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2018-03-18
    • 2017-10-27
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    相关资源
    最近更新 更多