

 从补丁 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="t_Sorting_data"></a>

**注意**  
我们建议您使用 `SORTKEY AUTO` 创建表。如果您这样做，则 Amazon Redshift 会使用自动表优化来选择排序键。有关更多信息，请参阅 [自动表优化](t_Creating_tables.md)。本节的其余部分提供了有关排序顺序的详细信息。

在创建表时，您可以将其一个或多个列定义为*排序键*。初次向空表中加载数据时，行以排序顺序存储在磁盘上。有关排序键列的信息会被传递给查询计划程序，后者借助该信息构建能够充分利用数据排序方式的计划。有关更多信息，请参阅 [CREATE TABLE](r_CREATE_TABLE_NEW.md)。有关创建排序键时最佳实践的信息，请参阅[选择最佳的排序键](c_best-practices-sort-key.md)。

排序可实现范围限制谓词的高效处理。Amazon Redshift 将列式数据存储在 1 MB 的磁盘数据块中。每个数据块的最小值和最大值作为元数据的一部分存储。如果查询使用范围限制谓词，则查询处理器可在表扫描期间借助该最小值和最大值快速跳过大量的数据块。例如，假设某张表存储着按日期排序的五年数据，且查询指定了一个月的日期范围。在这种情况下，您可以从扫描中最高消除 98% 的磁盘数据块。如果数据未排序，则该查询就不得不扫描更多（也可能是全部）的磁盘数据块。

您可以指定复合排序键或交错排序键。当查询谓词使用了*前缀*（有序排序键列的子集）时，复合排序键的效率更高。交错排序键为排序键中的每个列赋予相同的权重，因此，查询谓词可以使用构成该排序键的列的任意子集（可以是任意顺序）。

要了解排序键的选择对查询性能产生的影响，请使用 [EXPLAIN](r_EXPLAIN.md) 命令。有关更多信息，请参阅 [查询计划和执行工作流程](c-query-planning.md)。

要定义排序类型，请在您的 CREATE TABLE 或 CREATE TABLE AS 语句中使用 INTERLEAVED 或 COMPOUND 关键字。默认为 COMPOUND。如果使用 INSERT、UPDATE 或 DELETE 操作定期更新表，则建议使用 COMPOUND。INTERLEAVED 排序键可使用多达八个列。根据您的数据和集群大小，VACUUM REINDEX 所需的时间显著大于 VACUUM FULL 所需的时间，因为它需要执行额外的过程来分析交错排序键。对于交错表，排序和合并操作所花费的时间更长，因为与复合排序相比，交错排序可能有更多需要重新排列的行。

要查看某张表的排序键，请查询 [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md) 系统视图。

**Topics**
+ [多维数据布局排序](t_Sorting_mutidimensional-sort-key.md)
+ [复合排序键](t_Sorting_data-compound.md)
+ [交错排序键](t_Sorting_data-interleaved.md)