网易首页 > 网易号 > 正文 申请入驻

PostgreSQL技术大讲堂 - 第30讲:多表连接方式

0
分享至

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。

第30讲:多表连接方式

第30讲预告:9月23日(周六)19:30-20:30,钉钉群直播,群号:35822460

内容1 : Nested Loop Join连接方式

内容2 : Merge Join连接方式

内容3 : Hash Join连接方式

多表连接方式

多表连接方式

三种连接方式:

nested loop join

merge join

hash join

支持所有join操作:

NATURAL INNER JOIN

INNER JOIN

LEFT/RIGHT OUTER JOIN

FULL OUTER JOIN

嵌套循环连接方式

Nested Loop Join

嵌套循环联接是最基本的联接操作,它可以用于任何联接条件。

Nested Loop Join图解

Materialized Nested Loop Join

我们使用下面的具体示例来探索执行器如何处理具体化嵌套循环连接的计划树,以及如何估计成本。

testdb=# EXPLAIN SELECT * FROM tbl_a AS a, tbl_b AS b WHERE a.id = b.id;

QUERY PLAN

Nested Loop (cost=0.00..750230.50 rows=5000 width=16)

Join Filter: (a.id = b.id)

-> Seq Scan on tbl_a a (cost=0.00..145.00 rows=10000 width=8)

-> Materialize (cost=0.00..98.00 rows=5000 width=8)

-> Seq Scan on tbl_b b (cost=0.00..73.00 rows=5000 width=8)

(5 rows)

Materialize成本估算

(Materialized) Nested Loop成本估算

Indexed Nested Loop Join

testdb=# EXPLAIN SELECT * FROM tbl_c AS c, tbl_b AS b WHERE c.id = b.id;

QUERY PLAN

Nested Loop (cost=0.29..1935.50 rows=5000 width=16)

-> Seq Scan on tbl_b b (cost=0.00..73.00 rows=5000 width=8)

-> Index Scan using tbl_c_pkey on tbl_c c (cost=0.29..0.36 rows=1 width=8)

Index Cond:(id=b.id)

(4 rows)

具有外部索引扫描的嵌套循环联接的三种变体

Merge Join连接方式

Merge Join

Merge Join成本估算

testdb=# EXPLAIN SELECT * FROM tbl_a AS a, tbl_b AS b WHERE a.id = b.id AND b.id < 1000;

QUERY PLAN

Merge Join (cost=944.71..984.71 rows=1000 width=16)

Merge Cond: (a.id = b.id)

-> Sort (cost=809.39..834.39 rows=10000 width=8)

Sort Key: a.id

-> Seq Scan on tbl_a a (cost=0.00..145.00 rows=10000 width=8)

-> Sort (cost=135.33..137.83 rows=1000 width=8)

Sort Key: b.id

-> Seq Scan on tbl_b b (cost=0.00..85.50 rows=1000 width=8)

Filter: (id < 1000)

(9 rows)

Materialized Merge Join

Other Variations

强制使用merge join

testdb=# SET enable_hashjoin TO off;

testdb=# SET enable_nestloop TO off;

testdb=# EXPLAIN SELECT * FROM tbl_c AS c, tbl_b AS b WHERE c.id = b.id AND b.id < 1000;

QUERY PLAN

Merge Join (cost=135.61..322.11 rows=1000 width=16)

Merge Cond: (c.id = b.id)

-> Index Scan using tbl_c_pkey on tbl_c c (cost=0.29..318.29 rows=10000 width=8)

-> Sort (cost=135.33..137.83 rows=1000 width=8)

Sort Key: b.id

-> Seq Scan on tbl_b b (cost=0.00..85.50 rows=1000 width=8)

Filter: (id < 1000)

(7 rows)

materialized merge join with outer index scan

testdb=# SET enable_hashjoin TO off;

testdb=# SET enable_nestloop TO off;

testdb=# EXPLAIN SELECT * FROM tbl_c AS c, tbl_b AS b WHERE c.id = b.id AND b.id < 4500;

QUERY PLAN

Merge Join (cost=421.84..672.09 rows=4500 width=16)

Merge Cond: (c.id = b.id)

-> Index Scan using tbl_c_pkey on tbl_c c (cost=0.29..318.29 rows=10000 width=8)

-> Materialize (cost=421.55..444.05 rows=4500 width=8)

-> Sort (cost=421.55..432.80 rows=4500 width=8)

Sort Key: b.id

-> Seq Scan on tbl_b b (cost=0.00..85.50 rows=4500 width=8)

Filter: (id < 4500)

(8 rows)

indexed merge join with outer index scan

testdb=# SET enable_hashjoin TO off;

testdb=# SET enable_nestloop TO off;

testdb=# EXPLAIN SELECT * FROM tbl_c AS c, tbl_d AS d WHERE c.id = d.id AND d.id < 1000;

QUERY PLAN

Merge Join (cost=0.57..226.07 rows=1000 width=16)

Merge Cond: (c.id = d.id)

-> Index Scan using tbl_c_pkey on tbl_c c (cost=0.29..318.29 rows=10000 width=8)

-> Index Scan using tbl_d_pkey on tbl_d d (cost=0.28..41.78 rows=1000 width=8)

Index Cond: (id < 1000)

(5 rows)

Hash Join连接方式

Hash Join

In-Memory Hash Join

构建阶段:

将内部表的所有元组插入到一个批处理中

探测阶段:

将外部表的每个元组与批处理中的内部元组进行比较,如果满足连接条件,则进行连接

Hash Join

计划器处理转变

预处理

1、计划和转换CTE(如果查询中带有with列表,则计划器通过SS_process_ctes()函数处理每个with查询)

2、向上拉子查询

根据子查询的特点,改为自然连接查询。

testdb=# SELECT * FROM tbl_a AS a, (SELECT * FROM tbl_b) as b WHERE a.id = b.id;

testdb=# SELECT * FROM tbl_a AS a, tbl_b as b WHERE a.id = b.id;

3、将外部联接转换为内部联接

优化器可用规则

Getting the Cheapest Path

1、表数量小于12张,应用动态规划得到最优的计划

2、表数量大于12张,应用遗传查询优化器

参数 geqo_threshold指定的阈值(默认值为12)

3、分为不同的级别层次来处理

多表查询连接顺序选择

SGetting the Cheapest Path of a Triple-Table Query

testdb=# SELECT * FROM tbl_a AS a, tbl_b AS b, tbl_c AS c

testdb=# WHERE a.id = b.id AND b.id = c.id AND a.data < 40;

考虑3种组合:

{tbl_a,tbl_b,tbl_c}=min({tbl_a,{tbl_b,tbl_c}},{tbl_b,{tbl_a,tbl_c}},{tbl_c,{tbl_a,tbl_b}}).

创建多表查询的计划树· 此查询的EXPLAIN命令的结果如下所示

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
马斯克确认特斯拉Model2将于明年上市,售价约为18.2万人民币

马斯克确认特斯拉Model2将于明年上市,售价约为18.2万人民币

经济观察报
2024-04-29 18:09:04
原来享福的是同一批人,哈哈过于真实了

原来享福的是同一批人,哈哈过于真实了

涛涛生活搞笑
2024-04-30 18:06:02
别忘了他也是戴尔12年生涯至今0冠,和凯恩是“难兄难弟”...

别忘了他也是戴尔12年生涯至今0冠,和凯恩是“难兄难弟”...

直播吧
2024-05-01 10:29:05
愿天堂没有宗教车!科技进步成果:不是情怀遥遥领先而是生命至上

愿天堂没有宗教车!科技进步成果:不是情怀遥遥领先而是生命至上

大风文字
2024-04-29 08:55:38
有些女人老了反而更气质:3大骨相优势,2大皮相优势,全中太难得

有些女人老了反而更气质:3大骨相优势,2大皮相优势,全中太难得

室内设计师阿喇
2024-04-01 07:55:03
投资数十万的校园超市开业两天被迫停业?校方:因私下转让改变业态未报备

投资数十万的校园超市开业两天被迫停业?校方:因私下转让改变业态未报备

封面新闻
2024-04-30 10:39:29
有种“蜕变”叫贝克汉姆家孩子,四个娃全长歪,网友:贝嫂真强大

有种“蜕变”叫贝克汉姆家孩子,四个娃全长歪,网友:贝嫂真强大

户外钓鱼哥阿勇
2024-05-01 07:25:23
0:1不敌国安 主帅于根伟一个糊涂决定坑苦津门虎 改变了比赛结果

0:1不敌国安 主帅于根伟一个糊涂决定坑苦津门虎 改变了比赛结果

零度眼看球
2024-05-01 10:10:50
湖人头号背锅侠出炉!詹姆斯也不演了,直接提要求!

湖人头号背锅侠出炉!詹姆斯也不演了,直接提要求!

德译洋洋
2024-05-01 11:38:33
500亿件 快递业强劲动力折射出中国经济回升向好

500亿件 快递业强劲动力折射出中国经济回升向好

金台资讯
2024-04-30 20:26:00
缅甸人可以到云南工作了,彭德仁听话是有好处的,敏昂莱能想明白

缅甸人可以到云南工作了,彭德仁听话是有好处的,敏昂莱能想明白

泸沽湖
2024-05-01 01:19:08
大S被摆了一道?赔本也要办演出原因曝光,疑被具俊晔签合同拿捏

大S被摆了一道?赔本也要办演出原因曝光,疑被具俊晔签合同拿捏

萌神木木
2024-04-29 19:17:11
T-哈里斯:布伦森是个狡猾的家伙 他非常难以防守

T-哈里斯:布伦森是个狡猾的家伙 他非常难以防守

直播吧
2024-05-01 12:08:07
1换3,王哲林交易或敲定,杨鸣回应杜锋,郭艾伦最新伤情曝光

1换3,王哲林交易或敲定,杨鸣回应杜锋,郭艾伦最新伤情曝光

东球弟
2024-05-01 08:16:46
一触即发!傅崐萁回台与民进党正面对决,政策变更解封必须落实

一触即发!傅崐萁回台与民进党正面对决,政策变更解封必须落实

张友骅
2024-05-01 11:27:03
徐向前曾担任孙中山卫士,多年后宋庆龄却摇头:我那时不认识你啊

徐向前曾担任孙中山卫士,多年后宋庆龄却摇头:我那时不认识你啊

小金鱼的眼泪
2024-05-01 10:49:29
曝LX员工在朋友圈讨论问界车祸,涉嫌破坏了企业形象,遭降级降薪处罚

曝LX员工在朋友圈讨论问界车祸,涉嫌破坏了企业形象,遭降级降薪处罚

可达鸭面面观
2024-04-29 18:39:31
快船彻底完了!伦纳德宣布休战,哈登和队友被他折磨到心态崩溃

快船彻底完了!伦纳德宣布休战,哈登和队友被他折磨到心态崩溃

林子说事
2024-04-30 15:35:04
郑铮:克雷桑之前发型有点“娘们”,换发型就决定要进球了

郑铮:克雷桑之前发型有点“娘们”,换发型就决定要进球了

懂球帝
2024-04-30 21:44:15
女主播穿着丝袜回村相亲,男子直接上手就摸:天冷、我给你暖暖

女主播穿着丝袜回村相亲,男子直接上手就摸:天冷、我给你暖暖

佑宛故事汇
2024-04-30 11:34:07
2024-05-01 12:30:44
CUUG
CUUG
北京神脑资讯技术有限公司
462文章数 20关注度
往期回顾 全部

科技要闻

余承东卸任华为终端CEO 新任命为董事长

头条要闻

华为高颜值HR自称不是被劝退:职业规划和公司政策不符

头条要闻

华为高颜值HR自称不是被劝退:职业规划和公司政策不符

体育要闻

"意甲最佳"金玟哉 踢回了中超水平...

娱乐要闻

黄子韬被曝求婚徐艺洋 大量亲密照曝光

财经要闻

俞敏洪,踏足A股!

汽车要闻

预售2.89-3.49万 奔腾小马正式开启预售

态度原创

房产
本地
时尚
旅游
公开课

房产要闻

单价2万内,装标4200+,主城改善大盘无套路硬刚!

本地新闻

食味印象 | 潍坊:碳水脑袋的人间乐园

见过大世面的女人,不用“穿金戴银”,靠穿搭也能美得出挑

旅游要闻

假期出游“口味”改改?小城这样宠你!

公开课

父亲年龄越大孩子越不聪明?

无障碍浏览 进入关怀版