GreenPlum中的union可能比union all要快很多

0    157    3

Tags:

👉 本文共约1309个字,系统预计阅读时间或需5分钟。

现象

项目上反馈说,系统很卡慢,我登陆gpcc上查看,发现有很多SQL跑了2天还没跑完,其SQL语句基本都是同一条:

SQL语句格式,是一条由UNION ALL组成的SQL,内容较复杂:

分析

初步分析,发现好多表没有索引,先创建了部分索引后继续查看执行计划,发现基本都走了索引,但是依然很慢。

优化手段

SQL调优1:将union all修改为union

这种情况碰到好几次案例了。

当然,在这里,修改为union后,结果集和之前的是一样的

分析了一下执行计划,修改为union后,执行计划里多了2次Redistribute Motion重分布的过程。

通常情况下,UNION ALL 比 UNION 快,因为 UNION ALL 不需要执行额外的去重操作。然而,在 Greenplum 中,情况可能会相反,即 UNION 可能比 UNION ALL 快,原因如下:

  1. 分布式架构:

• Greenplum 是一个大规模并行处理 (MPP) 数据库,它通过将数据分布在多个段实例 (segment instances) 上来提高查询性能。

• 当使用 UNION 时,每个段实例都会独立地执行去重操作,这通常是在本地完成的,减少了网络传输的开销。

  1. 去重操作:

• UNION 的去重操作通常在段实例级别完成,这意味着每个段实例都会去除其局部结果集中的重复行。

• 由于去重是在段实例本地完成的,因此当合并最终结果集时,需要传输的数据量减少,从而降低了网络传输的成本。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复