zoukankan      html  css  js  c++  java
  • GP SQL 优化

    1、收集统计信息
    vacuum full analyze ZCXT.ZCOT_PS_PROJECT;

    2、检查表的数据量分布
    select gp_segment_id,count(*) from fact_table group by gp_segment_id;

    3、表结构上
    建议创建表的时候,分布键放在最前面,接着是分区键,接着是大字节的字段到小字节。

    4、分布键
    把连接键定义为数据分布键(如果多个列作为数据分布键,他们应该都出现在连接中,否则还是会造成无效广播),常用于join和where条件的列作为分布键,最典型的例子是两张做join的表都用需要连接的列作为分布键。

    5、写法上
    (1)、不用distinct,改用group by

    (2)、UNION操作应该用UNION ALL加GROUP BY的方式进行改写

    (3)、一般不使用Index,索引的操作不超过5%

    (4)关于or语法gp的OR语法效果很差,用
    in (select 1 union all select 2) 代替 in (select 1 from t1) or in (select 2 from t2),
    exists (select 1 union all select 2) 代替 exists (select 1 from t1) or exists (select 2 from t2),
    特别是子查询中,括号内引用括号外的字段作为条件的情况,这种时候,同一张表多次引入来改写OR语句效率都比 or高

    (5)关于并列查询
    不要使用 (column_1,column_2) in (select c1,c2),而采用 exists,单字段没关系,2个及以上字段效率可能存在问题


    6、执行计划上避免大表的广播
    执行计划广播会显示 broadcast
    GreenPlum有三种数据的移动操作,会体现在执行计划上
    (1)、BroadCast Motion(N:N),广播数据。每个节点向其他节点广播需要发送的数据。
    (2)、Redistribute Motion(N:N),重新分布数据。利用join的列值hash不同,将筛选后的数据在其他segment重新分布
    (3)、Gather Motion(N:1),聚合汇总数据,每个节点将join后的数据发到一个单节点上,通常是发到主节点master。

  • 相关阅读:
    PowerShell尝试ssh登录
    PowerShell收发TCP消息包
    powershell对指定IP进行端口扫描
    PowerShell尝试登录ftp
    PowerShell批量扫描IP和端口
    《PowerShell 3.0 Advanced Admin handbook》已于今日上市
    PowerShell尝试登录SQL Server
    Docker 数据卷
    Dockerfile自定义镜像
    Docker 容器操作
  • 原文地址:https://www.cnblogs.com/bbliutao/p/7850443.html
Copyright © 2011-2022 走看看