MySQL 8.0.18与8.0.20 开始支持hash join注意点

自MySQL 8.0.18起引入了Hash Join方法以提高连接操作效率。适用于无索引的等值连接场景,并在8.0.20版中扩展到更多类型的连接操作。

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

在MySQL 8.0.18之前,表的join方式只有嵌套循环(nested loop)这一种方式;
8.0.18推出了hash join的方式以替代嵌套循环。

hash join的原理概括为:
选择占用空间较小的表t1(不一定是行数)作为驱动表,计算其join字段的hash值,在内存中build一个hash table,将t1的join字段的hash值存放至hash table。然后对被驱动表t2的join字段计算hash值,并与内存中的hash table进行查找匹配。

使hash join方式生效的前提是用于join的字段上没有索引
在8.0.18中,还需要一个对等的条件(table1.a=table2.a),才能满足hash join

原文如下:
Beginning with MySQL 8.0.18, MySQL employs a hash join for any query for which each join has an equi-join condition, and in which there are no indexes that can be applied to any join conditions。

当有一个或多个索引可用于单表谓词时,也可以使用散列连接。
A hash join can also be used when there are one or more indexes that can be used for single-table predicates.

在8.0.20中,取消了对等条件的约束,可以全面支持non-equi-join,Semijoin,Antijoin,Left outer join/Right outer join。
原文转载:理论学习 | MySQL 8.0.18 +的hash join学习_db_murphy的博客-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值