Vertica的这些事(十一)—— vertica中group by 和join 语句的优化

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

CREATE TABLE sortopt (
    a INT NOT NULL, 
    b INT NOT NULL,
    c INT,
    d INT
);
CREATE PROJECTION sortopt_p (
   a_proj,
   b_proj,
   c_proj,
   d_proj )
AS SELECT * FROM sortopt
ORDER BY a,b,c 
UNSEGMENTED ALL NODES;
INSERT INTO sortopt VALUES(5,2,13,84);
INSERT INTO sortopt VALUES(14,22,8,115);
INSERT INTO sortopt VALUES(79,9,401,33);
  • 第一种情况

  • 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 字段**

可以参考官网Avoiding GROUP BY HASH with Projection Design

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据社

码字不易,谢谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值