Redshift:sortkey 是不是应该包含 distkey?
Posted
技术标签:
【中文标题】Redshift:sortkey 是不是应该包含 distkey?【英文标题】:Redshift: Should the sortkey contain the distkey?Redshift:sortkey 是否应该包含 distkey? 【发布时间】:2016-03-24 03:32:19 【问题描述】:我们有按公司 ID 分片的客户数据。也就是说,任何公司的数据都不会与其他公司的数据混合,因此选择它作为 distkey。
鉴于一个节点可能包含数千家公司,公司 ID 是否应该是排序键中的第一列?还是 distkey 在开始扫描之前已经将数据限制在给定的公司?
【问题讨论】:
distkey 应该是一个性能选择。用它来放置不同的碎片并没有做任何事情。它是透明的。它不像 X 公司可以只连接到分片 Y 并查看他们的数据。 我明白这一点,但它并不能真正回答这个问题。如果我执行查询:SELECT COUNT(*) FROM sales WHERE company_id = 123
它将知道要运行查询的节点,但是 then 它将需要扫描整个节点以查找记录(因此它应该在排序键中),还是节点上的数据被分割成单独的company_id(不需要排序键)?
【参考方案1】:
Dist 键不影响行在每个节点/切片/块中的存储顺序。排序键(或自然顺序,如果没有)defines the order。
如果您希望使用 company_id 进行频繁查询并且希望获得最大性能,请将 company_id 设置为主排序键(COMPOUND 或默认值,而不仅仅是 INTERLEAVED)。
我还建议您熟悉SVL_QUERY_REPORT view。它可以告诉您是否使用了全扫描(或在使用最佳排序键时限制范围)、针对哪些切片以及实际扫描了多少行。为相同的数据尝试不同的表布局,不仅要查看查询时间,还要从这份报告中确认 Redshift 符合您的预期。
【讨论】:
以上是关于Redshift:sortkey 是不是应该包含 distkey?的主要内容,如果未能解决你的问题,请参考以下文章
我应该同时使用一个列作为 distkey 和 sortkey
Redshift 可以使用子查询的结果来按 sortkey 过滤吗?
Redshift:sortkey 和 distkey 可以为空吗?
Redshift在建表时有sortkey选项来提高查询性能,DolphinDB有类似的机制吗?