天天看点

Vertica的这些事<十>—— vertica中group by 和join 语句的优化

vertica group by优化语句,先对语句进行explain 操作查看预执行计划,其中group by 分为 groupby pipelined 和 groupby hash,通过执行计划可以清楚的看到vertica到底采用的那种执行方式,优化一般就是吧groupby hash优化为groupby pipelined 下面讲一下官网举得例子

第一种情况

group by a

group by a,b

group by b,a

group by a,b,c

group by c,a,b

如果是按照上面的这种group by 则使用的是groupby pipelined,因为group by 后的字段全部在projection中预排序

group by a,b,c,d

这种情况则是采用的groupby hash 不建议~

第二种情况

group by a,c

执行 按照groupby hash 因为a,c字段没有相邻,如果是

group by a,c或者group by b,c则会按照groupby pipelined 执行

第三种情况

group by 之前有 where条件时

select a from tab where a = 10 group by b 此时按照 groupby pipelined select a from tab where a = 10 group by c 此时按照 groupby hash 以为按照c排序的 处理的所有的 projectionn 列的列未出现在 where 子句等值条件中,如果上如改为select a from tab where a = 10 and b=10 group by c 则会按照groupby pipelined 执行

通过以上3中情况的介绍,希望大家对vertica的group by有一定的理解。

**> 关于join vertica会有两种执行方式 merge join 和hash join ,建议关联是要走merge join

执行merge join的必要条件就是 关联的字段要在两个表中预排序,也就是要是两个表的order by 字段**