

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

# 分析查询计划
<a name="c-analyzing-the-query-plan"></a>

运行 [EXPLAIN](r_EXPLAIN.md) 命令以获取查询计划。

在分析查询计划前，应该熟悉如何阅读该计划。如果您不熟悉如何阅读查询计划，建议阅读 [创建和解释查询计划](c-the-query-plan.md) 后再继续。

若要分析查询计划提供的数据，请按照下列步骤操作：

1. 确定成本最高的步骤。继续完成其余步骤时，专注于优化这些步骤。

1. 查看联接类型：
   + **嵌套循环**：此类联接通常因此联接条件被忽略而发生。有关建议的解决方案，请参阅[嵌套循环](query-performance-improvement-opportunities.md#nested-loop)。
   + **哈希和哈希联接**：当联接列不为分配键，也不为排序键时，使用哈希联接来联接表。有关建议的解决方案，请参阅[哈希联接](query-performance-improvement-opportunities.md#hash-join)。
   + **合并联接**：无需更改。

1. 注意哪个表用于内部连接，哪个表用于外部连接。查询引擎通常会为内部连接选择较小的表，为外部连接选择较大的表。如果没有进行此类选择，则您的统计数据可能已过时。有关建议的解决方案，请参阅[表统计数据缺失或过时](query-performance-improvement-opportunities.md#table-statistics-missing-or-out-of-date)。

1. 查看是否有任何高成本的排序操作。如果有，请参阅 [未排序或排序错乱的行](query-performance-improvement-opportunities.md#unsorted-or-mis-sorted-rows) 了解建议的解决方案。

1. 查找具有高成本操作的以下广播运算符：
   + **DS\$1BCAST\$1INNER**：指示将表广播到所有计算节点。这对于小表而言很好，但对于大表来说并不理想。
   + **DS\$1DIST\$1ALL\$1INNER**：表示所有工作负载都位于单个切片上。
   + **DS\$1DIST\$1BOTH**：表示大量重新分配。

   有关这些情况的建议解决方案，请参阅[非最优数据分配](query-performance-improvement-opportunities.md#suboptimal-data-distribution)。