【青鸟飞扬教育】Join 算法原理(青鸟教育集团)

【青鸟飞扬教育】Join 算法原理(青鸟教育集团)

2.1.1 驱动表和被驱动表

在Join语句中,执行引擎优先扫描的表被称为驱动表,另一张表被称为被驱动表。执行引擎在选择驱动表时,除了必须要遵守的特定语义外,最重要的考虑便是执行效率。

首先列举两种特定语义约束驱动表选取的场景

场景一:Straight join指定连接顺序,强制要求执行引擎优先扫描左侧的表。

场景二:Left/Right [outer] join,方向连接的特点是反方向表中如果不存在关联的数据则填充NULL值,这一特性要求方向查询时优先扫描相同方向的表。倘若where条件中明确指明反方向表中的部分列非空,则驱动表的选择就不受此语义的限制,执行引擎会依据效率选取驱动表。

当没有特定语义的约束时,执行引擎便会依据执行效率选取驱动表,如何判断哪张表作为驱动表的效率更高呢?下文会结合Join的两种算法更深入地探讨这个问题。

2.1.2 Block Nested-Loop Join

假设一个数据量为m行的驱动表与一个数据量为n行的被驱动表进行join查询。

最简单的一种算法:

从驱动表扫描一行数据;

对被驱动表进行全表扫描,得到的结果依次与驱动表的数据进行join并把满足条件的数据加入结果集;

接着扫描驱动表,每扫描一行数据,均重复执行一次步骤2,直至驱动表的全部数据被扫描完毕。

这种算法的磁盘扫描开销为m*n,非常低效,MySQL在实际中并未直接使用该算法,而是采用缓存的思想(分配一块Join buffer)对该算法进行改进,并命名为Block Nested-Loop join(BNL)。

BNL的算法步骤为:

从驱动表一次扫描K条数据,并把数据缓存在Join buffer;

对被驱动表进行全表扫描,得到的结果依次与驱动表的K条数据进行join并把满足条件的数据加入结果集;

清空join_buffer;

接着从驱动表再取出K条数据,重复步骤2、3,直至扫描完驱动表的全部数据。

上述算法中,驱动表分段取数的次数记为l,整个算法的磁盘扫描开销为m+ln。由于分段的次数与驱动表的数据成正相关,所以公式可以记为m+λmn,λ的取值范围为(0,1)。

当两张表的行数(m、n大小)固定的情况下,m对结果的影响更大,m越小整体扫描的代价越小,所以执行引擎优先选择数据量更小的表作为驱动表(符合“小表驱动大表”的说法)。

特别声明:[【青鸟飞扬教育】Join 算法原理(青鸟教育集团)] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

王心凌的人鱼之光:照见每个女性♀️心底的梦幻与勇气(王心凌人鱼造型)

这份灵动与耀眼,并非为年龄设定的边界,而是来自勇气与自信的自然流露,正如她在镜头前给我们的清晰信号:美丽从不被时间定义。那一袭梦幻亮片连衣裙👗,像是从深海里游来的美人鱼披着星光出现在潮汐之间,周身的光芒灵动而晶…

王心凌的人鱼之光:照见每个女性♀️心底的梦幻与勇气(王心凌人鱼造型)

热烈》:激情与套路的双重呈现(热烈frogy)

但在表演层面,他的情绪表达仍显单薄,人物缺乏足够复杂性。影片整体人物群像严重依赖类型片的固有模式,没有给观众留下太多难忘的角色。 影片在舞蹈场景的拍摄上确实下了功夫,采用了大量快速剪辑与多机位切换,营造了舞台…

《<strong>热烈</strong>》:激情与套路的双重呈现(热烈frogy)

热搜第一!著名超模何穗账号内容全不见,“疑似退圈”曾排全球前30(热搜榜第一的小说是什么)

有人说她结婚隐退,毕竟36岁了,模特圈这年纪算“高龄”;有人猜是合约问题,跟公司闹掰了;还有人觉得是身体原因,常年穿高跟鞋👠走秀,膝盖早不行了。何穗去年还在微博发过“今天又是被年轻妹妹卷到的一天”,带个苦笑表情…

热搜第一!著名超模何穗账号内容全不见,“疑似退圈”曾排全球前30(热搜榜第一的小说是什么)

一次性脚垫怎么选?50包装防水脚踩纸垫真能保护爱车吗?(一次性脚垫怎么用)

开车最怕什么?不是堵车,是鞋底泥沙、雨雪水渍把爱车地毯“毁掉”!今天揭秘“一次性脚垫”到底是不是智商税。从材质到防水性能,从使用场景到50包装性价比,帮你理清真假需求。实测数据+真实体验告诉你:它不是万能神器,但关键时刻真能救命!适合新手司

一次性脚垫怎么选?50包装防水脚踩纸垫真能保护爱车吗?(一次性脚垫怎么用)

肤缇蓓儿光电胶原臻,稳住年轻底色打造无龄肌

当你下意识地提拉脸颊,却发现苹果肌的弧度不如从前饱满,连下颌线都悄悄模糊了边界。原来肌肤的衰老从不是突然降临的暴雨,而是藏在日常里的琐碎里,悄无声息就压垮了年轻的轮廓,肤缇蓓儿光电胶原臻,懂你对“无龄感”的真…

肤缇蓓儿光电胶原臻,稳住年轻底色打造无龄肌