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 了,但这种称谓习惯被保留了下来。欢迎了解其中原委的读者补充
下图形象地展示了构建阶段的工作原理:

Hash Join 原理:探查阶段
构建阶段完成后,SQL 引擎就从 探测端 逐行读取记录,然后用 Join 列的 Hash 值去内存中的哈希表中查找是否有对应记录,有就是匹配到了 构建端 的记录,然后联合两端的数据作为结果输出。
同样以上面的示例 SQL 为例,SQL 引擎逐行读取 persons 表中的记录,取出它的 country_id 列进行 hash 处理,以得到的哈希值为 Key 去哈希表中查找,找同相同哈希值的记录就意味着和 countries 表中的一条记录 Join 上了。
下图展示了探查阶段的工作原理:

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

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的, 我师父给了一些 电气工程师学习方法和资料,让我不断提升自己,…...
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存储是一个对象存储ÿ…...
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…...
如何使用生成式人工智能探索视频博客的魅力?
视频博客,尤其是关于旅游的视频博客,为观众提供了一种全新的探索世界的方式。通过图像和声音的结合,观众可以身临其境地体验到旅行的乐趣和发现的喜悦。而对于内容创作者来说,旅游视频博客不仅能分享他们的旅行故事,还…...
gpt批量工具,gpt批量生成文章工具
GPT批量工具在今天的数字化时代扮演着越来越重要的角色,它们通过人工智能技术,可以自动批量生成各种类型的文章,为用户提供了便利和效率。本文将介绍5款不同的GPT批量工具,并介绍一款知名的147GPT生成工具,以及另外一款…...
零基础掌握罗技鼠标宏:让你的PUBG压枪更稳定
零基础掌握罗技鼠标宏:让你的PUBG压枪更稳定 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为《绝地求生》中难以控制的武器后坐…...
别再裸发ROS图像了!image_transport保姆级教程:从压缩传输到参数调优,一次搞定
别再裸发ROS图像了!image_transport保姆级教程:从压缩传输到参数调优,一次搞定 在机器人视觉开发中,图像传输往往是性能瓶颈的关键所在。许多开发者习惯性地使用ros::Publisher/Subscriber直接处理图像数据,却不知这种…...
Paradox游戏模组管理终极解决方案:IronyModManager完整使用指南
Paradox游戏模组管理终极解决方案:IronyModManager完整使用指南 【免费下载链接】IronyModManager Mod Manager for Paradox Games. Official Discord: https://discord.gg/t9JmY8KFrV 项目地址: https://gitcode.com/gh_mirrors/ir/IronyModManager 你是否曾…...
HoRain云--AI 底层架构
🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...
深耕 Harness 工程,解锁 AI Agent 开发之路
2026三掌柜赠书活动第三十一期 Harness工程:从上下文管理到Agent系统构建 目录 前言 详解Harness工程核心价值与独特优势 关于《Harness工程:从上下文管理到Agent系统构建》 编辑推荐 内容简介 作者简介 图书目录 《Harness工程:从上…...
瀚高企业版V9.1.1在pg_restore还原备份文件时提示extract函数语法问题
文章目录环境症状问题原因解决方案环境 系统平台:UOS(海光) 版本:9.0 症状 瀚高数据库版本:企业版 V9.1.1 症状: pg_restore还原备份文件时,提示下面错误 pg_restore: 来自 TOC 记录 259; …...
Unity 2D开发第一课:建立空间直觉与项目根基
1. 为什么“Unity 2D 游戏开发教程(一)”不是从“新建项目”开始讲起 很多人点开标题叫“Unity 2D 游戏开发教程(一)”的视频或文章,第一帧就看到编辑器界面、鼠标点“New Project”、输入项目名、选模板——然后心里一…...
实用购机指南:屏幕出色、流畅耐用续航拉满的手机
一、前言2026 年上半年,智能手机市场迎来新一轮旗舰迭代,用户购机核心需求已从单一参数比拼,转向流畅不卡顿、性能强劲、屏幕护眼优质、续航持久耐用的全能体验,同时兼顾影像创作与美学设计。为帮消费者精准筛选高适配机型&#x…...
零极点分析:从系统稳定性到滤波器设计的核心工程工具
1. 项目概述:从“系统行为”的根源说起在信号处理、控制理论乃至电路设计的日常工作中,我们常常需要面对一个核心问题:如何预测、分析和设计一个系统的动态行为?无论是设计一个能稳定跟踪目标的控制器,还是优化一个音频…...
保姆级教程:用UltraISO给U盘刻录Ubuntu 22.04启动盘,一次成功不踩坑
零基础实战:用UltraISO打造Ubuntu 22.04启动盘的终极指南 第一次接触Linux系统安装的新手,往往会在制作启动盘这一步遇到各种意想不到的问题。U盘明明已经刻录完成,却在启动时出现黑屏、报错甚至根本无法识别——这些困扰过无数初学者的坑&am…...

