在Redshift数据库中,我想为替代表键和自然主键之间的维表确定一个排序键。该定义说:“在过滤,排序或分组数据时,应根据最常用的列选择排序键”。 我的问题是-
我有一个带有(Emp_key,Emp_Id,Emp_name)的Employee表,并且该表已与Emp键上的Fact表连接。这里“ Emp_key”是代理密钥,“ Emp_id”是自然主密钥。我过滤了对Emp_id的查询,但事实表中的“ Emp_key”被定义为“ dist键”,并读取了较大的维度,在联接键上定义了sort&dist键会导致更好的性能,所以我想知道我应该在尺寸表中的Emp_key和Emp_id之间进行选择吗?
另外,另一个困惑是在“ date_key”之间为“ date”维表选择排序,或者忽略定义排序键。
感谢您在这方面的建议。
谢谢!
答案 0 :(得分:0)
您的雇员表可能没有太多的行,您可以选择ALL
分发样式,因此表的副本位于群集的每个节点上。这样,您可以以非常低的成本避免这种困境。
UPD:通过这种设计,我将emp_key作为dist键(以便将联接的数据放在同一节点上),将emp_id作为排序键(以进行有效过滤)。我很确定查询计划者会优先考虑过滤而不是联接,因此首先它将过滤维度表中的行,然后才将事实表中的相应行联接起来。但是最好尝试所有选项并对一些查询进行基准测试,以查看哪种方法最有效。
如果您可以更改设计,我只是将emp_id添加到事实表中(因为它看起来像键映射1到1)是ELT的一部分,并且再次避免了困境。