1. 如何产生执行计划
- explain和explain analyze,都可以显示执行计划
EXPLAIN ANALYZE运行语句后除了显示计划外,还有下列额外的信息:
- 运行该查询消耗的总时间(单位毫秒)
- 计划几点操作中涉及的segment数量
- 查询中产生最多行的segmen的segmentID以及最大行数
- 操作中所使用的内存
- 从产生最多行的segment中检索第一行所花费的时间,以及从该segment中检索所有行所花费的时间
explain和explain analyze的区别:
- explain会为查询显示其查询计划和估算的代价,但是不执行该查询
- explain analyze除了显示查询的查询计划之外,还会执行该查询,但不显示查询结果,如果需要在DML语句上使用explain analyze的话,需要用在事务中进行回滚
2. 如何阅读执行计划
解释计划是一份报告,它详细描述了Greenplum数据库优化器确定的执行查询要遵循的步骤。计划是一棵节点构成的树,应该从底向上阅读,每一个节点都会将其结果传递给其直接上层节点。每个节点表示计划中的一个步骤,每个节点对应的那一行标识了在该步骤中执行的操作——例如扫描、连接、聚集或者排序操作。节点还标识了用于执行该操作的方法。例如,扫描操作的方法可能是顺序扫描或者索引扫描。而连接操作可以执行哈希连接或者嵌套循环连接
下面是一个简单查询的解释计划。该查询在存储于每一Segment中的分布表中查找行数。
gpacmin=# EXPLAIN SELECT gp_segment_id, count(*)
FROM contributions
GROUP BY gp_segment_id;
QUERY PLAN
--------------------------------------------------------------------------------
Gather Motion 2:1 (slice2; segments: 2) (cost=0.00..4.44 rows=4 width=16)
-><