hash join mysql_Mysql优化_第十三篇(HashJoin篇)

本文详细介绍了 MySQL 8.0.18 起引入的 Hash Join 优化,适用于纯等值查询且无法使用索引的情况。从 8.0.20 开始,Blocked Nested Loop Algorithm 被移除,由 Hash Join 替代。Hash Join 可以在多个join条件中只要存在一对等值的情况下使用,甚至在没有等值的某些场景下也能应用。此外,文章还讨论了 Hash Join 在笛卡尔积、Semijoin、Antijoin、Left Outer Join 和 Right Outer Join 中的应用,以及如何通过调整 `join_buffer_size` 系统变量来优化内存使用。
摘要由CSDN通过智能技术生成

Mysql优化_第十三篇(HashJoin篇)

1 适用场景

纯等值查询,不能使用索引

从MYSQL 8.0.18开始,MYSQL实现了对于相等条件下的HASHJOIN,并且,join条件中无法使用任何索引,比如下面的语句:

SELECT *

FROM t1

JOIN t2

ON t1.c1=t2.c1;

等值查询,使用到索引

当然,如果有一个或者多个索引可以适用于单表谓词,hash join也可以使用到。(这句话不是很懂?原句为:A hash join can also be used when there are one or more indexes that can be used for single-table predicates.

相对于Blocked Nested Loop Algorithm,以下简称BNL,hash join性能更高,并且两者的使用场景相同,所以从8.0.20开始,BNL已经被移除。使用hash join替代之。

通常在EXPLAIN的结果里面,在Extra列,会有如下描述:

Extra: Using where; Using join buffer (hash join)

说明使用到了hash join。

多个join条件中至少包含一个等值查询(可以包含非等值)

虽然hash join适用于等值join,但是,从原则上来讲,在多个join条件中,只要有每对join条件中,至少存在一个等值,Mysql就可以使用到hash join来提升速度&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值