zoukankan      html  css  js  c++  java
  • 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


    作者:WindyQin
    出处:http://www.cnblogs.com/qinchaofeng/

    微信公众号
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
  • 相关阅读:
    ASP.NET的一些概念
    破解金盘gdlisxp系统
    对1,3,4,6,7,8组合显示成“1,3-4,6-8”方法
    C#关于Sort排序问题
    ISBN和标准编码关系以及概念
    sql批量修改插入数据
    C#winform导出数据到Excel的类
    C#winform初试报表
    JS解析XML文件和XML字符串
    java中String,StringBuffer,StringBuilder之间的区别
  • 原文地址:https://www.cnblogs.com/qinchaofeng/p/12659357.html
Copyright © 2011-2022 走看看