mysql 小表连大表_3.mysql小表驱动大表的4种表连接算法

本文介绍了MySQL中关于小表驱动大表的概念和选择原则,详细讲解了4种表连接算法:嵌套循环算法(包括Nested-Loop Join、Block Nested-Loop Join、Index Nested-Loop join和Batched Key Access join),并阐述了如何根据索引和驱动表选择合适的连接算法以优化查询性能。
摘要由CSDN通过智能技术生成

小表驱动大表

1、概念

驱动表的概念是指多表关联查询时,第一个被处理的表,使用此表的记录去关联其他表。驱动表的确定很关键,会直接影响多表连接的关联顺序,也决定了后续关联时的查询性能。

2、原则

驱动表的选择遵循一个原则:

在对最终结果集没影响的前提下,优先选择结果集最小的那张表作为驱动表。改变驱动表就意味着改变连接顺序,只有在不会改变最终输出结果的前提下才可以对驱动表做优化选择。外连接的顺序改变就很可能影响结果。

预估结果集的原则:

如果where里没有相应表的筛选条件,无论on里是否有相关条件,默认为全表

如果where里有筛选条件,但是不能使用索引来筛选,那么默认为全表

如果where里有筛选条件,而且可以使用索引,那么会根据索引来预估返回的记录行数

3、识别

explain显示结果里排在第一行的就是驱动表

4、嵌套循环算法

(1) 4种算法

在使用索引关联的情况下,有Index Nested-Loop join和Batched Key Access join两种算法;

在未使用索引关联的情况下,有Simple Nested-Loop join和Block Nested-Loop join两种算法;

(2) Nested-Loop Join Algorithms

一个简单的嵌套循环联接(NLJ)算法,循环从第一个表中依次读取行,取到每行再到联接的下一个表中循环匹配。这个过程会重复多次直到剩余的表都被联接了。通过外循环的行去匹配内循环的行,所以内循环的表会被扫描多次。

for each r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值