Redshift:sortkey 是否应该包含 distkey?
Redshift: Should the sortkey contain the distkey?
我们有按公司 ID 分片的客户数据。也就是说,任何公司的数据都不会与其他公司的数据混合,因此选择它作为 distkey。
考虑到一个节点可能包含数千家公司,公司 ID 是否应该在排序键中的第一列?或者 distkey 在开始扫描之前是否已经将数据限制到给定的公司?
Dist 键不影响行在每个 node/slice/block 中的存储顺序。排序键(或没有排序键时的自然顺序)defines the order.
如果您希望使用 company_id 进行频繁查询并希望获得最佳性能,请将 company_id 设置为主排序键(复合或默认,而不仅仅是交错)。
我还建议您熟悉 SVL_QUERY_REPORT view。它可以告诉您是否使用了全扫描(或在使用最佳排序键时进行了范围限制)、针对哪些切片以及实际扫描了多少行。为相同的数据尝试不同的 table 布局,不仅要查看查询时间,还要从这份报告中确认 Redshift 做了您期望的事情。
我们有按公司 ID 分片的客户数据。也就是说,任何公司的数据都不会与其他公司的数据混合,因此选择它作为 distkey。
考虑到一个节点可能包含数千家公司,公司 ID 是否应该在排序键中的第一列?或者 distkey 在开始扫描之前是否已经将数据限制到给定的公司?
Dist 键不影响行在每个 node/slice/block 中的存储顺序。排序键(或没有排序键时的自然顺序)defines the order.
如果您希望使用 company_id 进行频繁查询并希望获得最佳性能,请将 company_id 设置为主排序键(复合或默认,而不仅仅是交错)。
我还建议您熟悉 SVL_QUERY_REPORT view。它可以告诉您是否使用了全扫描(或在使用最佳排序键时进行了范围限制)、针对哪些切片以及实际扫描了多少行。为相同的数据尝试不同的 table 布局,不仅要查看查询时间,还要从这份报告中确认 Redshift 做了您期望的事情。