【问题标题】: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(不需要排序键)?

标签: amazon-web-services amazon-redshift


【解决方案1】:

Dist 键不影响行在每个节点/切片/块中的存储顺序。排序键(或自然顺序,如果没有)defines the order

如果您希望使用 company_id 进行频繁查询并且希望获得最大性能,请将 company_id 设置为主排序键(COMPOUND 或默认值,而不仅仅是 INTERLEAVED)。

我还建议您熟悉SVL_QUERY_REPORT view。它可以告诉您是否使用了全扫描(或在使用最佳排序键时限制范围)、针对哪些切片以及实际扫描了多少行。为相同的数据尝试不同的表布局,不仅要查看查询时间,还要从这份报告中确认 Redshift 符合您的预期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2022-01-13
    • 1970-01-01
    • 2013-03-18
    • 2022-01-09
    • 2011-05-08
    相关资源
    最近更新 更多