博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vertica的这些事<十>—— vertica中group by 和join 语句的优化
阅读量:5873 次
发布时间:2019-06-19

本文共 1262 字,大约阅读时间需要 4 分钟。

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

可以参考官网

转载地址:http://spenx.baihongyu.com/

你可能感兴趣的文章
关于-O0、O1、O2、O3优化
查看>>
ajax笔记
查看>>
布局模型
查看>>
Jquery弹窗
查看>>
生日小助手
查看>>
bzoj 2194 快速傅立叶之二
查看>>
51nod 1443 路径和树——最短路生成树
查看>>
17th, Jan 2012 今天的时间表
查看>>
[精华][推荐]CAS SSO 实现单点登录实例源码
查看>>
IIS 部署WCF时遇到这么个错:
查看>>
VSS Teamwork 环境架设[文章汇编集]
查看>>
VC++ 在两个程序中 传递字符串等常量值的方法:使用了 WM_COPYDATA 消息的
查看>>
拓扑资料
查看>>
x86_64平台编译链接汇编程序
查看>>
POJ3126 Prime Path(BFS)
查看>>
VC6.0多线程例程
查看>>
Unity 3D-AR开发-Vuforia教程手册
查看>>
放球问题 组合数学 转自百度百科
查看>>
神经网络的火热
查看>>
视图之一--创建简单的视图
查看>>