Amazon redshift 联接的红移排序键

Amazon redshift 联接的红移排序键,amazon-redshift,Amazon Redshift,我读过很多帖子,现在还不清楚。对于星型模式,我会认为如果我从一个维度表(比如d_article)驱动一个查询,我最终会得到一组用于查询/探测主事实表的sk(sk_article)。因此,在dim表的Where子句中常用的字段上设置排序键是有意义的 接下来…这里是我找不到的例子或答案…我应该在事实表的排序键中包含sk_文章吗?更具体地说,我是否应该创建一个具有所有不同sk的交错排序键,因为我们并不总是使用相同的sk来连接到事实表 我没有看到任何关于包含用于联接的排序键的参考 红移排序键 排序键

我读过很多帖子,现在还不清楚。对于星型模式,我会认为如果我从一个维度表(比如d_article)驱动一个查询,我最终会得到一组用于查询/探测主事实表的sk(sk_article)。因此,在dim表的Where子句中常用的字段上设置排序键是有意义的

接下来…这里是我找不到的例子或答案…我应该在事实表的排序键中包含sk_文章吗?更具体地说,我是否应该创建一个具有所有不同sk的交错排序键,因为我们并不总是使用相同的sk来连接到事实表

我没有看到任何关于包含用于联接的排序键的参考

红移排序键


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

另外,正如托尼所说


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

每种类型的钥匙都有特定的用途。也许这本书对你有好处

对于联接表、事实表和维度表,应该使用分发密钥

红移分布键(距离键)

它确定数据在红移中存储的位置。集群基本上跨计算节点存储数据。当大量数据存储在单个节点上时,查询性能会受到影响。这本书对你很好

我希望这能回答你的问题


这里有一个很好的会话,它可能对理解SORT与DIST Key非常有帮助。

“SORT Key只是用于排序,而不是用于连接。”>>是的,但我们仍在探索事实表中的记录子集。为什么从dim表中检索的SKs不能用于过滤事实表中的记录?我的意思是,如果我把这些SK的列表放在事实表的Where子句中,而没有连接,在SK列上有一个排序键会加快检索速度,对吗?在这一点上是有帮助的,因为列被排序了,因此会加快检索速度,但主要目的是为了排序。虽然分发键确实对连接起作用,但您必须为dim表正确分发数据,以便在执行连接查询时通过红移最小化从一个节点到另一个节点的数据移动。是的,我理解使用分发键的重要性。但就排序键而言,在事实表中的SK字段上放置交错排序键听起来应该会加快速度(理论上)?排序键主要用于优化区域映射的有效性(有点像BRIN索引)并启用范围受限扫描。它们在大多数维度表上都不是很有用,因为维度表通常很小。排序键唯一有助于提高联接性能的是,如果您为合并联接设置了所有内容,那么这通常只适用于大型事实到事实表联接。交错键更像是一种特殊的排序键,对任何连接都没有帮助。@TonyGibbs感谢您的观点。是的,我同意你的观点,编辑了我的答案并添加了额外的信息。