Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

指定分配方式

本部分中指定分配方式的注意事项和建议使用了星型 schema 作为示例。您的数据库设计可能基于星型 schema、星型 schema 的变体或完全不同的 schema。Amazon Redshift 旨在与您选择的任何 schema 设计高效协作。本部分中的原则适用于任何设计 schema。

  1. 为所有表指定主键和外键。

    Amazon Redshift 不强制实施主键和外键约束,但查询优化程序在生成查询计划时会使用它们。如果您设置了主键和外键,则您的应用程序必须维护这些键的有效性。

  2. 根据共同列分配事实数据表及其最大的维度表。

    根据参与最常见联接的数据集的大小(而不只是表的大小)选择最大的维度。如果某张表常使用 WHERE 子句筛选,则只有其部分行参与联接。与贡献更多数据的较小的表相比,此类表对重新分配的影响较小。将维度表的主键和事实数据表对应的外键均指定为 DISTKEY。如果多个表使用相同的分配键,则它们也会与事实数据表并置。事实数据表只能有一个分配键。任何通过其他键联接的表都不能与事实数据表并置。

  3. 为其他维度表指定分配键。

    根据主键或外键分配表,具体视它们与其他表最常见的联接方式而定。

  4. 评估是否将某些维度表更改为使用 ALL 分配。

    如果一个维度表不能与事实数据表或其他重要的联接表并置,您可以通过将整个表分配到所有节点来大大提高查询性能。使用 ALL 分配会使存储空间需求成倍增长,并且会增加加载时间和维护操作,所以在选择 ALL 分配前应权衡所有因素。下面的部分讲解如何通过评估 EXPLAIN 计划来确定 ALL 分配的候选项。

  5. 为剩余的表使用 EVEN 分配。

    如果表大部分为非规范化数据且不参与联接,或如果您无法明确确定采用其他分配方式,请使用 EVEN 分配(默认分配方式)。

表创建完毕后,您将无法更改其分配方式。要使用其他分配方式,您可以重新创建该表并借助深层复制填充该新表。有关更多信息,请参阅 执行深层复制