检查查询计划步骤 - Amazon Redshift

检查查询计划步骤

您可以通过运行 EXPLAIN 命令来查看查询计划中的步骤。以下示例显示了 SQL 查询并解释了输出。自下而上阅读该查询计划,您可以了解执行该查询所用的每个逻辑操作。有关更多信息,请参阅 查询计划

explain select eventname, sum(pricepaid) from sales, event where sales.eventid = event.eventid group by eventname order by 2 desc;
XN Merge (cost=1002815366604.92..1002815366606.36 rows=576 width=27) Merge Key: sum(sales.pricepaid) -> XN Network (cost=1002815366604.92..1002815366606.36 rows=576 width=27) Send to leader -> XN Sort (cost=1002815366604.92..1002815366606.36 rows=576 width=27) Sort Key: sum(sales.pricepaid) -> XN HashAggregate (cost=2815366577.07..2815366578.51 rows=576 width=27) -> XN Hash Join DS_BCAST_INNER (cost=109.98..2815365714.80 rows=172456 width=27) Hash Cond: ("outer".eventid = "inner".eventid) -> XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=14) -> XN Hash (cost=87.98..87.98 rows=8798 width=21) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=21)

作为生成查询计划的一部分,查询优化程序将计划分解为流、分段和步骤。查询优化程序将分解计划,以准备将数据和查询工作负载分配到计算节点。有关流、分段和步骤的更多信息,请参阅查询计划和执行工作流程

下图显示了前面的查询和关联的查询计划。它显示涉及的查询操作如何映射到 Amazon Redshift 用于为计算节点切片生成编译代码的步骤。每个查询计划操作映射到段中的多个步骤,有时映射到流中的多个段。

在此图中,查询优化程序运行查询计划,如下所示:

  1. Stream 0 中,查询通过顺序扫描操作运行 Segment 0,以扫描 events 表。查询继续通过哈希操作运行 Segment 1,以为联接中的内部表创建哈希表。

  2. Stream 1 中,查询通过顺序扫描操作运行 Segment 2,以扫描 sales 表。它继续使用哈希联接运行 Segment 2 以联接表,其中联接列不是分配键和排序键。它再次继续通过哈希聚合来运行 Segment 2,以聚合结果。然后,查询使用哈希聚合操作运行 Segment 3 来执行未排序的分组聚合函数和排序操作,以评估 ORDER BY 子句和其他排序操作。

  3. Stream 2 中,查询在 Segment 4Segment 5 中运行网络操作,以将中间结果发送到领导节点以待进一步处理。

查询的最后一个分段返回数据。如果聚合或对返回集进行排序,则计算节点将各自的中间结果段发送到领导节点。然后,领导节点合并数据,以便将最终结果发送回请求客户端。

有关 EXPLAIN 运算符的更多信息,请参阅EXPLAIN