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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 忽然想到之前的一个面试题:三个线程顺序打印 ABC,该怎么实现?于是又自己动手写了一遍。
    FlySheep_ly阅读 310评论 0 1
  • 生于80尾的我,与很多同龄人一样,都很喜欢周星驰的电影,星爷是我们这个时代真正的喜剧之王。熟悉他电影的人,都可能会...
    就爱傻笑阅读 1,180评论 0 1
  • Node.js的文件系统的Api 1、读取文件readFile函数 2、写文件 3、以追加方式写文件 4、打开文件...
    明明三省阅读 67,494评论 8 96
  • 轻挑帘栊 期待你以绝美的姿态 惊艳这一刻 一杯淡淡清茶 一首经典老歌 你是天青色烟雨里走来 结了紫丁香般 忧愁的女...
    淡淡青莲阅读 395评论 2 4
  • 我们的世界,你们大人真不懂...... “童真与诗意相遇” Not a Box《不止是盒子》纽约时报畅销书,很有创...
    MABEL梅阅读 583评论 1 1

友情链接更多精彩内容