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

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

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);
AI 代码解读
  • 第一种情况
  • 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
0
0
0
362
分享
相关文章
Oracle查询优化-left join、right join、inner join、full join和逗号的区别
【1月更文挑战第5天】【1月更文挑战第13篇】实际查询时,多表联查是常规操作,但是连接方式有多种。
809 0
openGauss向量化Merge Join--inner join
openGauss向量化Merge Join--inner join
100 0
openGauss向量化Merge Join--inner join
SQL高级查询技巧(两次JOIN同一个表,自包含JOIN,不等JOIN)
掌握了这些,就比较高级啦 Using the Same Table Twice 如下面查询中的branch字段 SELECT a.account_id, e.emp_id, b_a.name open_branch, b_e.
4697 0
PostgreSQL sharding : citus 系列7 - topn 加速(count(*) group by order by count(*) desc limit x) (use 估值插件 topn)
标签 PostgreSQL , topn , topn.number_of_counters , count(*) group by order by count(*) desc limit x 背景 count(*) group by order by count(*) desc limit x 用来统计 topn。
1452 0
MySQL 子查询优化[IN/EXISTS]--smei join
MySQL 里面有哪些子查询呢? 标量子查询 内联视图 半连接/反连接 本篇主要讲解半连接查询 半连接?可以这么理解 where 条件后面有In/EXISTS这样的子查询称为semi jion 格式:select .
5476 0
sql语句中left join和inner join中的on与where的区别分析
原文:sql语句中left join和inner join中的on与where的区别分析 关于SQL SERVER的表联接查询INNER JOIN 、LEFT JOIN和RIGHT JOIN,经常会用到ON和WHERE的条件查询,以前用的时候有时是凭感觉的,总是没有搞清楚,今日亲自测试了下,理解到了一些内容,在此分享。
1533 0