ppg_fdw:如何使用pgsql构建mpp数据仓库(四)

本文探讨了在数据库系统中Join操作的重要性,特别是如何在pgsql中进行优化。内容包括PGSQL如何减少外连接,以及在分布式mpp环境下,如何依据数据分布选择Join策略。在TPCH模型中,由于特定的数据分片方式,可以避免额外的重分布操作,直接在OP上执行Join。举例说明了针对TPCH查询14的SQL实例处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=large]Join的处理[/size]
Join的处理在数据库中占有相当重要的地位。一般来说,在查询优化阶段,PGSQL会首先调用reduce_outer_joins函数来尽量消灭外连接:例如将全外连接转成左、右外连接(或者反左右连接)甚至是内连接,将左右外连接转化成内连接;接着PG会使用动态规划算法来选择一条cost最小的path来确定执行join的先后顺序。
而对于一个分布式的mpp系统来说,join的处理首先和数据的分布有着极大的关系,如果连接的字段就是数据划分的字段,那么可以直接下推join到各个OP执行,如果不是,那么需要选择一种代价比较小的方式:一,将一个小的表做重分布;二,如果表足够小,直接全复制到各个OP。
在TPCH的模型中,我们将fact表根据外键进行了水平分片,对dimension表进行全复制,而涉及到fact表的Join的SQL中,fact表都通过划分字段来进行关联的。因此无需进行重分布。
例如,对于TPCH的模板14生成的SQL实例来说:

select
100.00 * sum(case
when p_type like 'PROMO%'
then l_extendedprice * (1 - l_discount)
else 0
end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue
from
lineitem,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值