Merge Joins(PostgreSQL 14 Internals翻译版)

news2024/11/25 14:28:21

合并连接处理按连接键排序的数据集,并返回以类似方式排序的结果。输入集可以在索引扫描后预先排序;否则,执行者必须在实际合并开始之前对它们进行排序。

归并排序集

让我们看一个合并连接的例子;它在执行计划中由Merge Join节点表示:

在这里插入图片描述
优化器更喜欢这种连接方法,因为它返回排序的结果,如ORDER BY子句定义的那样。在选择计划时,优化器会注意数据集的排序顺序,除非确实需要,否则不会执行任何排序。例如,如果合并连接产生的数据集已经具有适当的排序顺序,则可以在随后的合并连接中使用:

在这里插入图片描述

首先要连接的表是机票和登机牌;它们都有一个复合主键(ticket_no,flight_id),结果按这两列排序。然后将生成的行集与票券表连接,票券表按ticket_no列排序。

连接只需要对两个数据集进行一次传递,并且不占用任何额外的内存。它使用两个指针指向内部集和外部集的当前行(最初是第一行)。

如果当前行的键不匹配,则其中一个指针(引用具有较小键的行)将向前移动到下一行,直到找到匹配。连接的行返回到上面的节点,并且内部集合的指针向前移动一位。操作将继续,直到其中一个集合结束。

该算法处理内部集合的副本,但外部集合也可以包含它们。因此,必须改进算法:如果在外部指针前进后键保持不变,则内部指针返回到第一个匹配行。因此,外部集合的每一行都将与具有相同键的内部集合的所有行相匹配。

对于外部连接,算法进一步调整了一点,但它仍然基于相同的原理。

合并连接条件只能使用相等操作符,这意味着只支持相等连接(尽管对其他条件类型的支持目前也在进行中)。

成本预估。 进一步查看刚刚的例子:

在这里插入图片描述
连接的启动成本至少包括所有子节点的启动成本。

通常,在找到第一个匹配之前,可能需要扫描外部或内部集合的一部分。可以通过比较(基于直方图)两个集合中最小的连接键来估计这个比例。但在这种特殊情况下,两个表中的票号范围是相同的。

总成本包括从子节点获取数据的成本和计算成本。

因为一旦其中一个集合结束,连接算法就会停止(当然,除非执行外部连接),所以可能只会部分扫描另一个集合。为了估计被扫描部件的尺寸,我们可以比较两个集合中的最大键值。在本例中,两个集合都将被完整读取,因此连接的总成本包括两个子节点的总成本之和。

此外,如果存在任何重复,则内部集合的某些行可能被扫描多次。估计的重复扫描次数等于连接结果的基数与内部集合的基数之差。在这个查询中,这些基数是相同的,这意味着集合不包含重复项。

该算法比较两个集合的连接键。一次比较的代价是在cpu_operator_cost值上估计的,而估计的比较次数可以看作是两个集合的行数之和(由重复引起的重复读取次数增加)。像往常一样,结果中包含的每一行的处理成本都是在cpu_tuple_cost值上估计的。

因此,在这个例子中,连接的成本估计如下:

在这里插入图片描述

并行模式

虽然合并连接没有并行特性,但它仍然可以在并行计划中使用。

外部集合可以由多个工作进程并行扫描,但内部集合总是由每个工作进程全部扫描。

由于并行散列连接几乎总是更便宜,我将关闭它一段时间:

在这里插入图片描述
下面是一个使用合并连接的并行计划的例子:

在这里插入图片描述
在并行计划中不允许完全和右外部合并连接。

修改

合并连接算法可用于任何类型的连接。唯一的限制是完整和右外部连接的连接条件必须包含合并兼容的表达式(“外列等于内列”或“列等于常量”)。内部连接和左外部连接只是根据不相关的条件过滤连接结果,但对于完全连接和右连接,这种过滤是不适用的。

下面是一个使用合并算法的全连接示例:

在这里插入图片描述

内部和左合并连接保留排序顺序。但是,完全外部连接和右外部连接不能保证这一点,因为NULL值可能会插入外部集的有序值之间,从而破坏排序顺序。为了恢复所需的顺序,规划器在这里引入Sort节点。自然地,它增加了计划的成本,使散列连接更有吸引力,所以计划器选择这个计划只是因为当前禁用了散列连接。

但是下一个示例不能没有散列连接:嵌套循环根本不允许完全连接,而由于不支持连接条件而不能使用合并。因此,无论enable_hashjoin参数值如何,都将使用散列连接:

在这里插入图片描述
让我们恢复之前禁用的哈希连接功能:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1123046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

效率提升一键完成房产小程序源码揭秘高效业务流程优化

在当今快节奏的房产市场中,提升业务流程的效率对于房地产行业从业者来说至关重要。而房产小程序源码作为一种全新的技术解决方案,为行业带来了前所未有的便利和效益。本文将为您揭秘房产小程序源码的重要性以及如何利用该技术优化业务流程,实…

双态IT乌镇用户大会——数据中心业务连续性国标专题研讨会成功举办

2023年10月13日-15日,由ITSS分会、证券基金行业信息技术应用创新联盟指导,ITSS数据中心运营管理组(DCMG)、双态IT论坛、智能运维国标工作组主办,ITSS媒体组、AI范儿协办的“2023第六届双态IT乌镇用户大会”于浙江乌镇召…

内衣迷你洗衣机什么牌子好?迷你洗衣机热销第一名

随着人们的生活水平的提升,越来越多小伙伴来开始追求更高的生活水平,一些智能化的小家电就被发明出来,而且内衣洗衣机是其中一个。现在通过内衣裤感染到细菌真的是越来越多,所以我们对内衣裤的清洗频次会高于普通衣服,…

React之render

一、原理 首先&#xff0c;render函数在react中有两种形式&#xff1a; 在类组件中&#xff0c;指的是render方法&#xff1a; class Foo extends React.Component {render() {return <h1> Foo </h1>;} }在函数组件中&#xff0c;指的是函数组件本身&#xff1a…

Ethernet Protocol

以太网协议说明 1 以太网子层架构 1)MAC and MAC CONTROL Sublayer MAC 负责以太网数据格式中所述的以太网成帧协议以及这些帧的错误检测。MAC 独立于并可以连接到任何类型的物理层设备。这提供了 MAC 子层的实时流控制操作。 MAC CONTROL 和 MAC 子层均由内核在所有操作模式…

VScode连接的服务器上使用jupyter显示请选择内核源

问题复现 我实在VScode上用ssh-remote连接的服务器&#xff0c;想用.ipynb文件上写东西&#xff0c;结果窗口上方弹出一个输入框&#xff0c;“请键入以选择内核”&#xff1b; 在扩展里找到jupyter更新一下 之前左边的图标是灰色的&#xff0c;后来我下下载了新的版本&#…

Spring Cloud Sleuth介绍以及简单示例

文章目录 什么是Spring Cloud SleuthSpring Cloud Sleuth的底层使用和实现原理如何使用Spring Cloud Sleuth添加依赖添加配置 注意事项Spring Cloud Sleuth的高级用法采样率设置日志格式设置自定义Trace和Span生成器配置Span收集器 简单实现controller层启动类配置类自定义逻辑…

无氢氟蚀刻剂中钛选择性湿蚀刻铜的研究

引言 众所周知&#xff0c;微尺度和纳米尺度的地形结构对真核细胞和原核细胞的行为都有显著的影响。例如&#xff0c;具有特殊尺寸的纳米线、纳米柱、纳米管已被证明具有抗菌性能。开发这种结构提供了一种无药物的方法来对抗感染&#xff0c;这被认为是一种替代释放抗菌剂的常…

contenteditable实现文本内容确认提示

功能需求&#xff1a; 列表进行批量查询&#xff0c;需要对输入的值做提交校验&#xff0c;分三种情况&#xff1a; 若部分字符串有误&#xff0c;部分字符串需要变更字体颜色做提示&#xff0c;再次点击确认则对部分正确数据执行批量查询 若全部数据有误则变更字体颜色做提示&…

基于OpenCV批量分片高像素影像

基于OpenCV批量分片高像素影像 为了更加精确的诊断和治疗&#xff0c;医疗影像往往是大像素&#xff08;1920x1080&#xff09;或超大像素图像&#xff08;4k图像4096x2160&#xff09;。这类图像的尺寸与深度学习实验数据常见尺寸&#xff08;227x227&#xff0c;或32x32&…

Inbound marketing | LTD入站营销是对Hubspot集客营销的升级

你如何理解Inbound marketing&#xff1f; 你如何理解Inbound marketing。 集客营销抑或是入站营销。 2006年&#xff0c;MIT的在校学生BrianHalligan和DharmeshShah&#xff08;hubspot的创始人&#xff09;首次提出Inbound marketing&#xff0c;有别于推广式营销的一种全…

【已解决】Vue项目中Vite以及Webpack代码混淆处理

&#x1f431; 个人主页&#xff1a;不叫猫先生&#xff0c;公众号&#xff1a;前端舵手 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域优质作者、阿里云专家博主&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4e2; 资料领取&#xff1a;前端…

触发点击事件,标签高亮显示

文章目录 &#x1f380;前言&#xff1a;&#x1f3e8;技术选型&#xff1a;vue中v-bind、v-for、的使用以及三目表达式操作步骤&#xff1a;标签动态属性响应函数标签样式 &#x1f380;前言&#xff1a; 我们经常在点击菜单时&#xff0c;会有颜色高亮显示(以红色为例)。在点…

看来直播带货不会被取消了

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 这个月大家一直都在讨论印尼关闭电商直播&#xff0c;争论国内是否应该关闭直播电商&#xff0c;而且讨论的愈演愈烈&#xff0c;卢松松也发布了很多相关的信息和言论。 结果10月20日&#xff0c;…

Microsoft Edge浏览器中使用免费的ChatGPT

一、双击打开浏览器 找到&#xff1a;扩展&#xff0c;打开 二、打开Microsoft Edge加载项 三、Move tab新标签 获取免费ChatGPT 四、启用Move tab。启用ChatGPT。 扩展 管理扩展 启用 五、新建标签页&#xff0c;使用GPT 六、使用举例 提问 GPT回复

因为做了这样的项目,成为了offer收割机!

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 文章目录 一、项目视图二、学习路线1. 实习生2. 校招生3. 社招生 四、目标路径五、项目组合 注意&#xff1a;小傅哥的星球&…

紫光同创FPGA实现HSSTLP高速接口视频传输,8b/10b编解码,OV5640采集,提供PDS工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、设计思路框架设计框图OV5640摄像头配置及采集视频数据封装按键选择HSSTLP高速收发器详解HSSTLP基本了解HSSTLP之时钟HSSTLP之PCSHSSTLP之PMAHSSTLP之接口说明硬件设计HSSTLP IP调用和配置 SFP连接方案选择视频数据…

(免费领源码)hadoop#Mysql离线与实时的离线与实时的电影推荐系统10338-计算机毕业设计项目选题推荐

摘 要 随着互联网与移动互联网迅速普及&#xff0c;网络上的电影娱乐信息数量相当庞大&#xff0c;人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的离线与实时的电影推荐系统 成为一个热门。然而电影信息的表示相当复杂&#xff0c;己有的相似度计算方法与推荐算法都各…

支持语音与视频即时通讯项目杂记(二)

目录 概念&#xff1a; 视频帧&#xff08;Video Frame&#xff09;是组成视频的基本单元。它可以被视为一幅静止的图像&#xff0c;它在一定的时间间隔内连续播放&#xff0c;从而形成了流畅的视频。 Changes to Qt Multimedia New features in Qt 6 Removed features C…

【具身智能模型2】RT-1: Robotics Transformer for Real-World Control at Scale

论文标题&#xff1a;RT-1: Robotics Transformer for Real-World Control at Scale 论文作者&#xff1a;Anthony Brohan, Noah Brown, Justice Carbajal, Yevgen Chebotar, Joseph Dabis, Chelsea Finn, Keerthana Gopalakrishnan, Karol Hausman, Alex Herzog, Jasmine Hsu,…