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

时间: 2024-10-27 07:16:22

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

Vertica的这些事<十五>—— Vertica备份元数据信息

-备份资源池 SELECT 'CREATE RESOURCE POOL ' || name || CASE WHEN memorysize IS NULL THEN ' ' ELSE ' MEMORYSIZE ' || '''' || memorysize || '''' END || CASE WHEN maxmemorysize = '' THEN ' ' ELSE ' MAXMEMORYSIZE ' || '''' || maxmemorysize || '''' END || CASE

Vertica的这些事<十四>—— vertica优化

DELETE_VECTORS 数据模型: 1.  规范化你的表 2.  使用核实的压缩格式 表设计: 1.  使用分区 2.  定义主键外键 3.  默认的数字类型长度可能比实际需要的大.例如:NUMBERC 该类型默认的长度是38位,如果实际的长度比这个小,那你建表的时候最好加上适合的长度. 4.  对于一个True/False值,Boolean类型比char(1)类型和integer类型更快. Projections 1.  Segmentation vs. Replication (uns

Vertica的这些事<七>—— Vertica中实现Oracle中的ws_concat功能

vertica中没有类似Oracle中的ws_concat函数功能,需要开发UDF,自己对C++不熟悉,所有只有想其他方法解决了. 上代码: SELECT node_state, MAX(DECODE(row_number, 1, a.node_name)) || NVL(MAX(DECODE(row_number, 2, ',' || a.node_name)), '') || NVL(MAX(DECODE(row_number, 3, ',' || a.node_name)), '') ||

Vertica的这些事<十一>—— Vertica 管理

1.版本信息 dbadmin=> SELECT version(); version ------------------------------------ Vertica Analytic Database v7.2.3-7 (1 row) 2.license信息 dbadmin=> SELECT DISPLAY_LICENSE(); DISPLAY_LICENSE ------------------------------------------- HPE Vertica 2/16/2

Vertica的这些事<八>—— vertica加密数据

通过创建 Secure Access Policies可以对vertica中的某一列数据进行加密: CREATE ACCESS POLICY ON [schema][tablename] FOR COLUMN columnname expression [ENABLE/DISABLE]; 例如: CREATE ACCESS POLICY ON customers_table FOR COLUMN SSN CASE WHEN ENABLED_ROLE('manager') THEN SSN WHE

Vertica的这些事<十三>—— Vertica停止数据库的操作步骤

1.查看各个节点的状态,保证没有节点出现down状态 select * from nodes; 2.设置最大会话数 => SELECT CURRENT_VALUE FROM CONFIGURATION_PARAMETERS WHERE parameter_name='MaxClientSessions'; CURRENT_VALUE --------------- 50 (1 row) ALTER DATABASE mydb SET MaxClientSessions = 0; 3.关闭所有会话

《Vertica的这些事》系列文章

HPVertica是一款MPP数据库,其列式存储对于OLAP分析很方便. HPE Vertica is the most advanced SQL database analytics portfolio built from the very first line of code to address the most demanding Big Data analytics initiatives. HPE Vertica delivers speed without compromise,

Vertica的这些事<九>—— 关于vertica的Connection Failover

最近在生产中发现vertica有个别节点老是宕机(又碰到的童鞋交流下),实际业务中有Python通过odbc连接vertica,还有Java通过jdbc连接vertica.假如你连接的那个节点正好是down的节点或者是standby节点,那么就会连接失败,程序就会报错,影响正常业务.其实vertica官方文档已经给出了解决方法,下面我们来看一下如何实现. ODBC Connection Failover 官方给出的代码如下: [VMartBadNode] Description=VMart Ve

微信公众帐号开发教程(十) 解析接口中的消息创建时间CreateTime

从微信公众平台的消息接口指南中可以看出,每种类型的消息定义中,都包含有CreateTime参数,它表示 消息的创建时间,如下图所示: 开发教程(十) 解析接口中的消息创建时间CreateTime-create time"> 上图是消息接口指南中4.1-文本消息的定义.注意CreateTime的描述:消息创建时间(整型),重点在于 这是一个整型的时间,而不是我们大家所熟悉的类似于"yyyy-MM-dd HH:mm:ss"的标准格式时间. 本文主要想介绍的就是微信消息接口中