Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

指定分配方式

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

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

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

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

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

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

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

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

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

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

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

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