

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 选择最佳的分配方式
<a name="c_best-practices-best-dist-key"></a>

在运行查询时，查询优化程序根据执行任何联接和聚合的需要将行重新分配到计算节点。选择表分配方式的目的是通过在运行查询前将数据放在需要的位置来最大程度地减小重新分配步骤的影响。

**注意**  
使用自动表优化时，不需要选择表的分配方式。有关更多信息，请参阅 [自动表优化](t_Creating_tables.md)。

关于最佳方法的一些建议如下：

1. 根据共同列分配事实数据表和一个维度表。

   事实数据表只能有一个分配键。任何通过其他键联接的表都不能与事实数据表并置。根据联接频率和联接行的大小选择一个要并置的维度。将维度表的主键和事实数据表对应的外键指定为 DISTKEY。

1. 根据筛选的数据集的大小选择最大的维度。

   只有用于联接的行才必须分配，因此需要考虑筛选后数据集的大小，而不是表的大小。

1. 在筛选结果集中选择基数高的列。

   例如，如果您在日期列上分配了一个销售表，您应该能获得非常均匀的数据分配，除非您的大多数销售都是季节性的。但是，如果您通常使用范围受限谓词进行筛选以缩小日期期间的范围，则大多数筛选行都将出现在有限的一组切片上并且查询工作负载将偏斜。

1. 将一些维度表改为使用 ALL 分配。

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

要让 Amazon Redshift 选择适当的分配方式，请指定 `AUTO` 作为分配方式。

有关选择分配方式的更多信息，请参阅[用于优化查询的数据分配](t_Distributing_data.md)。