exlpain select语句后会看到gather ,result等motion。具体的含义是什么
GATHER
表示的是一个汇总到集群节点的步骤
此步骤中会将数据汇总到集群节点进行处理,例如一次limt offset 操作,就可以将各个单机节点的数据limit 后汇总到集群节点再进行gcluster limit 操作。
GATHER NODE
表示的是一个汇总到单机节点的步骤
此步骤会将数据汇总到单机节点进行处理,例如我们使用到了sum这个聚合函数,就会将所有的数据放入一个单机节点内,计算sum的值。
RESULT
表示发送结果,通常是只在最后一步出现,表示发送数据到客户端
此步骤会将上一步的数据发送到客户端,通常是执行计划的结束。
REDIST
表示重分布方式,数据在多个单机节点之间移动
此步骤会将指定节点的数据按照hash 的规则在多个节点中重新进行分布,例如使用了inner join 并且连接条件是一个等值连接,且其中一个列是一个表的hash分布列就将另一个表的此列作为hash重分布的key列,按照其计算hash,并得到连接的结果。
NO REDIST
表示不进行分布,数据直接在本地进行执行
例如一个查询中使用到了hash分布列作为过滤条件,那么只需要在hash值对应的节点执行查询即可,不需要有数据移动即可得出结果。
BROADCAST
表示一个广播分布方式,数据在每个单机节点中都相同。
例如一个随机分布表t1 inner join 随机分布表t2 使用 a < b 的条件进行连接,那么其中一个表的数据就会复制到所有的节点中,与另一张表进行连接,才能得到正确的结果,通常进行数据广播操作的是一个小表。
RAND REDIST
随机分布,表示数据随机分布在各个节点上
通常在一个复制表的查询中,当其数据量过大时,数据可以随机分布到各个节点,均衡计算。
SCALAR
表示一个标量子查询步骤,会将结果传递给集群并进行下一步执行
标量子查询通常会单独执行出结果,再将此结果传递到集群节点,集群节点使用此结果带入到后续的查询计划中。