一起来读Greenplum/Deepgreen执行计划

来源:互联网 发布:网络公关服务公司 编辑:程序博客网 时间:2024/05/16 18:38

点击查看全文


 日常SQL优化过程中,最好用的手段就是通过执行计划。在Greenplum和Deepgreen中,运行 EXPLAIN 后产生的执行计划呈树状,这棵树的每一个分叉,都代表了一个单独的数据库操作,例如:表扫描、表连接、聚合、排序。

日常SQL优化过程中,最好用的手段就是通过执行计划。在Greenplum和Deepgreen中,运行 EXPLAIN 后产生的执行计划呈树状,这棵树的每一个分叉,都代表了一个单独的数据库操作,例如:表扫描、表连接、聚合、排序。

由于返回数据行数是从下向上传递的,所以我们在分析执行计划时,也应该自下而上。通常来说,最底下的是表扫描操作(索引、位图索引扫描)。如果查询中涉及到连接、聚合、排序操作,那么表扫描动作的上层就会有对应的这些操作。通常最顶上的部分是节点间数据移动(重分布、广播、聚集操作),在查询过程中,这些操作会涉及到在节点间移动数据。

EXPLAIN 执行计划中,每一个单独的步骤都会呈现在单独一行里,带有对应的动作类型及查询数据所耗费的时间(查询首行所用时间..查询全部所用时间):

1.cost

Cost以磁盘页读取为测量单位,1.0等同于一个顺序的磁盘页读取。第一个预估时间是起始消耗,即查询首行所消耗的时间,第二个预估值是总消耗,即查询全部行所用的时间。

2.rows

rows指的是执行计划某部分返回的总行数。这个数量通常少于实际的返回行数,反应的只是一个预估的数量。最顶层的返回的预估数量最接近实际查询、修改或删除影响的行数。

3.width

操作返回的所有数据所占用的字节数。

很重要的一点是,上层节点所花费的时间包括所以子节点占用时间,计划最顶层包含总执行花费的预估,这也是我们追求优化的部分。另外执行计划的消耗只与执行计划本身关心的步骤有关,与查询结果传输到客户端的消耗时间等因素无关。




点击查看全文



阅读全文
0 0
原创粉丝点击