当前位置: 首页 > news >正文

SQL 术语:Join 中的 Build 和 Probe 是什么意思?

《大数据平台架构与原型实现:数据中台建设实战》博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维码进入京东手机购书页面。

我们可能在一些介绍数据库 Join 档中看到 Build 和 Probe,分别代表着 Join 操作中的 右表 和 左表,为什么会有这样的称呼呢?原来它们都出自于一种叫 ”Hash Join“ 的 join 算法(常见的 Join 算法有:Hash Join、Loop Join、Merge Join)。先看一下名词解释:

  • Hash Join:一种实现 Join 的算法,它通过在 Join 的一侧构建 Hash Table 并在另一侧不断匹配 Hash Table 来得到 Join 的结果。

  • Build Side (构建端 / 右表):Hash Join 中用于构建 Hash Table 的一侧,称为 Build Side。多数引擎默认以 Join 的右表作为 Build Side。

  • Probe Side(探查端 / 左表):Hash Join 中用于不断匹配 Hash Table 的一侧,称为 Probe Side。多数引擎默认以 Join 的左表作为 Probe Side。

下面,简答介绍一下 Hash Join 的原理,我们基于 Hash join in MySQL 8 一文给出的解释展开,讲解使用的 SQL 示例为:

SELECTgiven_name, country_name
FROMpersons JOIN countries ON persons.country_id = countries.country_id;

Hash Join 的实现分为:构建和探查两个阶段,以下是详细介绍。

Hash Join 原理:构建阶段


在 Hash Join 算法下,当两张表要 Join 时,SQL 引擎会在内存中创建一张哈希表,然后选择将其中一张较小的表(按字节度量而不是行数)的数据加载到这张哈希表中,并以 Join 列的值作哈希的 Key。既然是要将表的数据加载到内存中,所以,不难理解算法为什么要选择加载小表而不是大表。

在上面的 SQL 示例中,countries 表肯定是一张小表,所以它会被加载到内存的哈希表中,也就是成为 Build Side,而 Join 列 country_id的值经 hash 后的值会作为哈希表中 Key。

❖ 至于为什么现在都将右表称为 Build Side,左表称为 Probe Side,我并没有找到比较主流的有说服力的观点,可能是因为算法在最初提出时就是这样约定的:选择右表作 Build Side, 左表作 Probe Side,后来随着 SQL 引擎的优化,虽然能自动选择小表作为 Build Side 了,但这种称谓习惯被保留了下来。欢迎了解其中原委的读者补充

下图形象地展示了构建阶段的工作原理:

img

Hash Join 原理:探查阶段


构建阶段完成后,SQL 引擎就从 探测端 逐行读取记录,然后用 Join 列的 Hash 值去内存中的哈希表中查找是否有对应记录,有就是匹配到了 构建端 的记录,然后联合两端的数据作为结果输出。

同样以上面的示例 SQL 为例,SQL 引擎逐行读取 persons 表中的记录,取出它的 country_id 列进行 hash 处理,以得到的哈希值为 Key 去哈希表中查找,找同相同哈希值的记录就意味着和 countries 表中的一条记录 Join 上了。

下图展示了探查阶段的工作原理:

img

不过,上图并不算好,没有把“探查”动作描述出来,下图相对更加形象一些:

Figure 1: Build and probe sides of the Hash Join algorithm.

Hash Join 的限制

最后,提醒一下 Hash Join 的限制,其实从上面的原理介绍中你大概能推测出来:由于 Hash Join 是使用 join 列的哈希值进行匹配的,所以,关联条件中必须包含至少一个 equi join(=)



参考资料:

https://www.zhihu.com/question/35906621

https://dev.mysql.com/blog-archive/hash-join-in-mysql-8/

相关文章:

SQL 术语:Join 中的 Build 和 Probe 是什么意思?

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…...

HTTP头部信息解释分析(详细整理)

这篇文章为大家介绍了HTTP头部信息,中英文对比分析,还是比较全面的,若大家在使用过程中遇到不了解的,可以适当参考下 HTTP 头部解释 1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型&#…...

探究短链接生成算法

1. 引言 在互联网时代,链接是连接用户和信息的桥梁,而长链接可能会因为过长、难记、不美观等问题影响用户体验,因此短链接的出现填补了这一空缺。短链接是将原始的长链接通过一定的算法转换成短字符串,从而实现了链接的简洁化&am…...

golang 实现http请求的调用,访问并读取页面数据和内置的一些方法

下午就不能好好学习一下golang,业务一直找个不停,自己定的业务规则都能忘得一干二净,让你查半天,完全是浪费时间。 golang实现访问并读取页面数据 package mainimport ("fmt""net/http" )var urls []string{…...

FFmpeg+OpenCV开发案例汇总

桌面共享工具(软编版) 桌面共享工具(DXGI硬编版) 智能广告大屏(可叠加透明广告) Android手机屏幕RTMP推流工具(推麦克风版) Android手机屏幕RTMP推流工具(推扬声器版…...

PySide6+VSCode Python可视化环境搭建

pip install pyside6 下载本期源码 vscode装一个PYQT Integration插件,设置好两个路径(下面有个脚本用于获取路径) 用everything的童鞋注意了:工具/选项/索引/强制重建 重启vscode可以看到,右击.ui文件时出现可以操作…...

【设计】设计一个web版的数据库管理平台后端精要

需求 springboot设计开发一个系统,在这个系统的数据库表中存放着2000个数据库实例,有MySQL、Oracle、sql server3种数据库类型,用户可以在页面上选择不同的实例,连接这些实例上的数据库,来执行业务sql 实现 Service…...

没有硬件基础可以学单片机吗?

没有硬件基础可以学单片机吗? 在开始前我分享下我的经历,我刚入行时遇到一个好公司和师父,给了我机会,一年时间从3k薪资涨到18k的, 我师父给了一些 电气工程师学习方法和资料,让我不断提升自己&#xff0c…...

ChatGPT引领的AI面试攻略系列:cuda和tensorRT

系列文章目录 cuda和tensorRT(本文)AI全栈工程师 文章目录 系列文章目录一、前言二、面试题1. CUDA编程基础2. CUDA编程进阶3. 性能优化4. TensorRT基础5. TensorRT进阶6. 实际应用与案例分析7. 编程与代码实践8. 高级话题与趋势 一、前言 随着人工智能…...

【战略前沿】人形机器人制造商Figure获得了OpenAI、Jeff Bezos、Nvidia和其他科技巨头的资助

原文:Humanoid robot-maker Figure gets funding from OpenAI, Jeff Bezos, Nvidia, and other tech giants 作者:ASSOCIATED PRESS ———————————————— Figure成立不到两年,还没有商业产品,但正在说服有影响力的…...

多块磁盘组磁盘离线导致VSAN存储崩溃的VSAN数据恢复案例

VSAN简介: VSAN是以vSphere内核为基础进行开发、可扩展的分布式存储架构。VSAN存储层由VSAN控制和管理,VSAN存储层是通过vSphere集群主机中闪存和硬盘的存储空间构建的,供vSphere集群使用的统一共享存储层。 VSAN存储是一个对象存储&#xff…...

Jenkins 的安装(详细教程)

文章目录 一、简介二、安装前准备三、windows 安装与启动1. 方式一2. 方式二3. 方式三 四、创建管理员用户五、常用设置1. 配置镜像地址2. 更改工作目录3. 开启可注册用户4. 全局变量配置 一、简介 官网:https://www.jenkins.io 中文文档:https://www.j…...

使用html网页播放多个视频的几种方法

前言 因为项目测试需要,我需要可以快速知道自己推流的多路视频流质量,于是我想到可以使用html网页来播放视频,实现效果极其简单,方法有好几种,以下是几种记录: 注意:测试过,VLC需要使…...

python 基础知识点(蓝桥杯python科目个人复习计划58)

今日复习内容:做题 例题1:仙境诅咒 问题描述: 在一片神秘的仙境中,有N位修仙者,他们各自在仙境中独立修炼,拥有他们独特的修炼之地和修炼之道,修炼者们彼此之间相互尊重,和平相处…...

【基于React实现共享单车管理系统】—React基础知识巩固(二)

【基于React实现共享单车管理系统】—React基础知识巩固(二) 一、React介绍 Facebook开源的一个JavaScript库React结合生态构成的一个MV*库 React的特点 Declarative(声明式编码)Component-Based(组件化编码&#…...

云桥通+跨境电商:SDWAN企业组网优化跨境网络案例

跨境电商企业在全球范围内展开业务,需构建稳定高效的网络架构以支持其电商平台运营。云桥通SDWAN企业组网技术为跨境电商提供网络连接和管理的优化,提升网络性能、可靠性和安全性。以下是一家跨境电商企业的SDWAN组网案例,详细介绍其实施情况…...

服务器有几种http强制跳转https设置方法

目前为站点安装SSL证书开启https加密访问已经是件很简单的事了,主要是免费SSL证书的普及,为大家提供了很好的基础。 Apache环境下如何http强制跳转https访问。Nginx环境下一般是通过修改“你的域名.conf”文件来实现的。 而Apache环境下通过修改.htacces…...

web坦克大战小游戏

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的订阅后,私信本人,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、贪吃蛇、飞机大战、坦克大战、开心消消乐、扑鱼达人、扫雷、打地鼠、斗地主等等。 <!DOCTYPE htm…...

如何使用生成式人工智能探索视频博客的魅力?

视频博客&#xff0c;尤其是关于旅游的视频博客&#xff0c;为观众提供了一种全新的探索世界的方式。通过图像和声音的结合&#xff0c;观众可以身临其境地体验到旅行的乐趣和发现的喜悦。而对于内容创作者来说&#xff0c;旅游视频博客不仅能分享他们的旅行故事&#xff0c;还…...

gpt批量工具,gpt批量生成文章工具

GPT批量工具在今天的数字化时代扮演着越来越重要的角色&#xff0c;它们通过人工智能技术&#xff0c;可以自动批量生成各种类型的文章&#xff0c;为用户提供了便利和效率。本文将介绍5款不同的GPT批量工具&#xff0c;并介绍一款知名的147GPT生成工具&#xff0c;以及另外一款…...

为Cosmos-Reason1-7B开发自定义前端界面:Streamlit快速搭建

为Cosmos-Reason1-7B开发自定义前端界面&#xff1a;Streamlit快速搭建 你是不是已经部署好了Cosmos-Reason1-7B模型&#xff0c;但每次调用都得在命令行里敲代码&#xff0c;或者用那些不太顺手的脚本&#xff1f;想不想给你的模型加一个漂亮、好用&#xff0c;还能分享给别人…...

OpenClaw智能写作:Qwen3.5-9B根据截图生成技术博客

OpenClaw智能写作&#xff1a;Qwen3.5-9B根据截图生成技术博客 1. 为什么需要截图转技术博客的自动化方案 作为一名经常需要写技术文档的开发者和技术博主&#xff0c;我长期被两个问题困扰&#xff1a;一是截取了大量代码片段和报错信息后&#xff0c;整理成文章需要耗费大量…...

解决UE VR开发痛点:VRExpansionPlugin实战指南与架构优化

解决UE VR开发痛点&#xff1a;VRExpansionPlugin实战指南与架构优化 【免费下载链接】VRExpansionPlugin A UE4 VR framework 项目地址: https://gitcode.com/gh_mirrors/vr/VRExpansionPlugin 在UE VR开发中&#xff0c;开发者常面临手部追踪精度不足、交互系统复杂、…...

《生产级性能监控实战:基于 Spring AOP + 消息提醒的智能告警系统设计与实现》

一、引言1.1 痛点场景在生产环境中&#xff0c;性能问题往往比业务缺陷更难以察觉&#xff0c;也更具破坏力。你是否也遇到过以下困境&#xff1a;生产环境性能问题难以发现&#xff1f;接口响应从 200ms 逐渐恶化到 5 秒&#xff0c;用户感知强烈&#xff0c;监控系统却毫无告…...

联想拯救者Y7000系列BIOS隐藏功能一键解锁工具:3分钟开启高级设置,轻松安装黑苹果

联想拯救者Y7000系列BIOS隐藏功能一键解锁工具&#xff1a;3分钟开启高级设置&#xff0c;轻松安装黑苹果 【免费下载链接】LEGION_Y7000Series_Insyde_Advanced_Settings_Tools 支持一键修改 Insyde BIOS 隐藏选项的小工具&#xff0c;例如关闭CFG LOCK、修改DVMT等等 项目地…...

3步解锁网盘直链:LinkSwift八大平台高速下载完全指南

3步解锁网盘直链&#xff1a;LinkSwift八大平台高速下载完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

BsMax终极指南:让Blender用户效率翻倍的专业插件

BsMax终极指南&#xff1a;让Blender用户效率翻倍的专业插件 【免费下载链接】BsMax BsMax Blender Addon (UI simulator/ Modeling/ Rigg & Animation/ Render Tools and ... 项目地址: https://gitcode.com/gh_mirrors/bs/BsMax 你是否曾为Blender的学习曲线而苦恼…...

抖音无水印视频下载全攻略:从技术突破到行业落地的实战指南

抖音无水印视频下载全攻略&#xff1a;从技术突破到行业落地的实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...

Brax视觉化工具详解:从HTML渲染到实时动画的完整流程

Brax视觉化工具详解&#xff1a;从HTML渲染到实时动画的完整流程 【免费下载链接】brax Massively parallel rigidbody physics simulation on accelerator hardware. 项目地址: https://gitcode.com/gh_mirrors/br/brax Brax是一个基于加速器硬件的大规模并行刚体物理模…...

告别窗口切换烦恼:Mac窗口置顶神器Topit让你的多任务效率飙升300%

告别窗口切换烦恼&#xff1a;Mac窗口置顶神器Topit让你的多任务效率飙升300% 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 还在为频繁切换窗口打断工作流而烦…...