【cs186】Project3 Join and Query Optimization part1

本文深入探讨了数据库查询优化中的几种JOIN算法,包括BlockNestedLoopJoin、SimpleHashJoin、On-DiskHashJoin、GraceHashJoin以及SortMergeJoin。这些算法针对不同场景优化了数据读取和处理效率,如BNLJ通过缓存减少磁盘读取,HashJoin利用哈希表加速匹配,而SMJ则通过排序降低比较次数。在面对大规模数据时,外部排序和内存限制成为关键考虑因素。

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

前言

pro3的东西就比较偏底层了,毕竟joinquery是我们平时用的比较多的sql语句,平时只会写sql,但不知道他在底层到底是怎么实现的,所以pro3就让我们在框架的基础上去实现这些方法。

代码框架和pro2还是一样的,git上有大佬把框架发出来了

Join

join方法就是把左边的表和右边的表满足条件的行join在一张新表中(条件可以是某一列取值相同)

Simple Nested Loop Join (SNLJ)

这是join实现的最基础的方法,也是效率最低的方法,实际的数据库中不太会使用这种方法,但在这个项目中,老师给我们简单的实现了这个方法以供参考。

SNLJ就是最简单的暴力算法,假设我左边的表有M行,右边的表是N行,SNLJ就是M*N的复杂度,用左边表的M行的每一行都去比较右边的N行,然后取得结果。

SNLJ是最容易理解也是最简单,速度最慢的方法。

我们看后面的算法其实也能知道,M*N的比较次数时肯定不能少的,那么为什么SNLJ会慢很多呢?

主要原因在SNLJ每次取行的时候只取一行,那么对于M

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值