看完这篇文章,放心在数据库使用Join查询吧

本文探讨了数据库JOIN查询的工作原理和实现算法,包括Nested Loop Join和Hash Join,并解释了在OLTP业务中如何有效使用JOIN。JOIN并不总是降低性能,优化器会选择最合适的算法,如Nested Loop Join适合数据量小的情况,而Hash Join适用于大数据查询。OLTP业务中的JOIN,如果带有主键或索引过滤,响应时间仍可保持在毫秒级别。
摘要由CSDN通过智能技术生成

前面我们了解了些单表SQL的索引设计及调优技巧。但在日常开发中,除了单表的SQL外,还有更为复杂的多表join查询和子查询语句。这就需要在多表中创建索引,难度也提升了不少。很多开发人员下意识地认为 JOIN 会降低 SQL 的性能效率,所以就将一条多表 SQL 拆成单表的一条条查询,但这样反而会影响 SQL 执行的效率。究其原因,在于开发人员不了解 JOIN 的实现过程

下面,我们就来一起看一下join的工作原理以及实现算法和应用场景,从而可以开心的使用join语句来连接查询数据。

一、join连接算法

MySQL 8.0 版本支持两种 JOIN 算法用于表之间的关联:

  • Nested Loop Join;

  • Hash Join。

通常认为,在 OLTP 业务中,因为查询数据量较小、语句相对简单,大多使用索引连接表之间的数据。这种情况下,优化器大多会用 Nested Loop Join 算法;而 OLAP 业务中的查询数据量较大,关联表的数量非常多,所以用 Hash Join 算法,直接扫描全表效率会更高。

注意,这里仅讨论最新的 MySQL 8.0 版本中 JOIN 连接的算法,同时也推荐在生产环境时优先用 MySQL 8.0

接下来我们来看一下这两个算法:

1、Nested Loop Join

Nested Loop Join 之间的表关联是使用索引进行匹配的,假设表 R 和 S 进行连接,其算法伪代码大致如下:

for each row r in R with matching condition:

    lookup index idx_s on S where index_key = r

    if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱娃哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值