金仓数据库KingbaseES 查询计划解读

45 阅读2分钟

1 执行计划主要内容

执行计划里每个节点主要内容包括: 执行动作,及其附加条件,比如索引扫描,索引条件等 估算成本:启动cost、总体cost、估计返回的行数和平均宽度,如果开启了Analyze选项,还会返回:实际成本:启动cost、总体cost实际返回的行数,节点循环执行次数 我们以下例来说明,执行计划输出结果各部分的内容: image.png

1、执行动作:

Index Scan:表示索引扫描 krds_instance_pkey:使用的索引名 krds_instance:访问的表名

整句话表示:访问krds_instance表的时候,使用的是索引扫描,扫描的索引是krds_instance_pkey。

2、成本估算

(cost=0.14..8.16 rows=1 width=7845) cost=0.14..8.16 0.14 启动成本,也就是说返回第一行需要多少cost 8.16 表示返回所有的数据的成本。这两个数值用..分开 rows=1 表示该查询会返回1行记录。 width=7845 表示每行平均宽度为7845字节。 在执行计划里,每一步的cost值都传给了上一层,也就是说每一个cost值代表的是在此步以下所有操作的代价总和。

3、实际成本

(actual time=0.018..0.019 rows=0 loops=1) actual time=0.018..0.019 表示实际的启动时间为0.018,实际的运行时间也为0.019。 rows=0 表示实际查询返回了0行记录(没有查询到)。 loops=1 表示该索引扫描只执行了1次。

4、索引条件

该句表示当前执行的索引扫描(Index Scan)使用的索引条件为:Index Cond: (id = '1'::numeric) 5、计划和执行时间 Planning Time: 0.180 ms Execution Time: 0.072 ms analyze的explain语句特有。表示生成执行计划用时0.180 ms,真正执行查询用时0.072 ms。

2执行计划执行顺序

image.png

2.1 计划节点

执行计划内部是树状结构,里面包含的节点主要有5类:扫描节点(Scan Node),连接节点(Join Node),物化节点(Materialization Node),控制节点(Control Node),并行节点(Parallel Node)。

  1. 扫描节点 : 顺序扫描(Seq scan) 索引扫描(Index scan) 位图扫描(Bitmap scan) TID扫描(TID scan) 覆盖索引扫描(Index only scan)
  2. 连接节点: 嵌套循环连接(NestLoop join) 哈希连接(Hash join) 归并连接(Merge join)
  3. 物化节点: 物化节点(Material) 分组节点(Group) 排序节点(Sort) 去重节点(Unique)
  4. 控制节点: Result节点 BitmapAnd/BitmapOr节点 Append节点 RecursiveUnion节点
  5. 并行节点: Gather/GatherMerge 并行全表扫描(Parallel SeqScan) 并行hash(Parallel Hash) 并行连接(Parallel HashJoin/MergeJoin) 并行聚集(Partial/Finalize Aggregate/HashAggregate/GroupAggregate) 并行Append(Parallel Append) 并行UNION(Parallel UNION)