暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8a MPP Cluster执行计划说明

原创 灵魂摆渡者 2021-10-14
1327

解释

ID

计划的步骤,从00开始执行,如上图,最后一步是04

MOTION

该步骤的执行结果的处理方式:

RESULT:结果发送到客户端

GATHER:结果发送到汇总节点

REDIST(…):结果HASH重分布,括号中为计算HASH的列,如果超长则截断为两个点

NO REDIST:结果直接保存到对应的数据分片,不进行重分布

BROADCAST:结果拉复制表

RAND REDIST:结果随机分布到所有节点

SCALAR N:结果为标量,N为标量子查询的编号,如果条件中有引用,则使用&xNx&方式引用,例如:

gbase> explain select * from x2 where id2 > (select count(*) from x3);

+----+-----------+-----------+----------+----------------+----+-------+------+

| ID | MOTION     | OPERATION | TABLE   | CONDITION      | ROW | WIDTH | COST(TOTAL) |

+----+-----------+-----------+----------+----------------+----+------+------------+

| 02 | [RESULT]   | SCAN      | x2[id4]   | id2{S} > &x1x&) | 16  | 16    | 1.05(3.26) |

| 01 | [SCALAR_1] | Step      | <00>     |                 | 0   | 0     | 0.52(2.21) |

|    |            | AGG       |         |               |     |       |                                                       |

| 00 | [GATHER]   | Table     | x3[id4] |               | 0   | 0     | 1.69(1.69) |

|    |            | AGG       |         |               |     |       |                                                       |

+----+-----------+-----------+----------+---------------+----+-------+------------+

5 row in set

OPERATION

SCAN:单表扫描,并使用条件过滤数据;

Table:单表,没有过滤条件;

SubQueryN:子查询,N为自动编号;

Step:使用前一个Step的结果;

INNER/LEFT/FULL JOIN:连接操作;

WHERE:子查询的WHERE条件;

GROUP:分组操作;

ORDER:排序操作;

LIMIT:计算LIMIT,OFFSET;

AGG:distinct,聚集操作;

UNION/UNION ALL/MINUS/INTERSECT:UNION操作;

例如图中00的含义为:

第一个INNER JOIN的左边为第二个INNER JOIN

第二个INNER JOIN的左边为date_dim,该表为复制表,有条件过滤;

第二个INNER JOIN的右边为salesreturns,其为子查询      Salesreturns子查询包含一个UNION ALL:为catelog_sa..与catelog_re..的UNION ALL;

第一个INNER JOIN的右边为catalog_page,该表为复制表;

第一个INNER JOIN结束后有一个GROUP操作;

对于每个步骤(ID列不为空的为一个步骤)OPERATION每层有1个空格的缩进。

TABLE

OPERATION涉及到的表,只显示别名和属性,超长截断为两个点;

HASH分布表:中括号中显示HASH列;

复制表:显示[REP];

随机分布表:显示[DIS];

子查询:OPERATION列显示SubQueryN,其中N为数字,用来区分不同的子查询;

某个步骤的结果:OPERATION列显示为Step,本列显示为<N>其中N为用到的步骤的第一列ID,表示该步骤的结果;

例如:

图中ID为03的步骤是一个汇总步骤,源表为x子查询;

x子查询为一个UNION,涉及到ssr,csr,wsr;

ssr,csr,wsr都是子查询,分别来自02,00,01的结果进行GROUP BY;

CONDITION

显示操作的条件,例如FILTER的单表条件,JOIN的连接条件,GROUP BY,ORDER BY,LIMIT的内容。

如果某个条件可能使用索引,会在有索引的列后进行标注,例如:

WHERE t1.a{S} > 10 表示可能使用t1.a的智能(Smart)索引

WHERE t1.a{H} = 10 表示可能使用t1.a的HASH索引

WHERE t1.a{H}= t2.b 表示可能使用t1.a的HASH索引

WHERE t1.a{H} = t2.b{H}表示可能使用t1.a和t2.b的HASH索引

WHERE contains(t1.a{F}…) 表示可能使用t1.a的全文(Full Text)索引

只有物理表的单列包含索引,

物理表单列的>,<,>=,<=,=可能使用智能索引

物理表单列的=可能使用HASH索引,包括等于常量和等值JOIN

物理表的contains函数可能使用全文索引

ROW,WIDTH,COST (TOTAL)

显示代价评估的内容,分别为该步骤结果的条数,行宽,该步骤的代价,总体代价。

其中代价不包括结果进行数据移动的代价。

图中的值不是真实数据,仅供参考。

当某些表或者列缺少统计信息时,则不会显示代价相关的内容,而显示缺少哪些表或列的统计信息,如下:

gbase> explain select * from x2 where id2 > (select count(*) from x3);

+----+-----------+-----------+----------+---------------+----+-------+------+

| ID | MOTION     | OPERATION | TABLE   | CONDITION     | NO STA Tab/Col| +----+-----------+-----------+----------+---------------+----+-------+

| 02 | [RESULT]   | SCAN       | x2[id4] | (id2{S} > &x1x&) |             |

| 01 | [SCALAR_1] | Step      | <00>    |               |             |

|    |            | AGG       |         |               |             |

| 00 | [GATHER]   | Table     | x3[id4] |               | x3         |

|    |            | AGG       |         |               | x2         |

+----+-----------+-----------+----------+---------------+----+-------+5 row in set

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论