【表连接方式】

本文详细介绍了SQL中的三种连接方法:嵌套循环连接(NestedLoops)、合并联接(Merge)及哈希联接(Hash),并分析了各自的适用场景。嵌套循环连接适用于外部表较小且内部表已建立索引的情况;合并联接适用于两个表在连接条件上都有索引的情况;哈希联接则用于两个表在连接条件上均无索引的场合。

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

对于三种连接,Oracle我们都可以使用hint来强制让优化器走:use_hash,use_nl,use_merge

三大连接方法的大纲先列如下:

nested loop

从A表抽一条记录,遍历B表查找匹配记录,然后从a表抽下一条,遍历B表。。。

就是一个二重循环

 

hash join

将A表按连接键计算出一个hash表,然后从B表一条条抽取记录,计算hash值,根据hash到A表的hash来匹配符合条件的记录

 

sort merge join

将A,B表都排好序,然后做merge,符合条件的选出

 

 

 

 

 

嵌套循环连接(Nested Loops), 合并联接(Merge), 哈希联接(Hash)的适用情况

 

1.嵌套循环连接(Nested Loops)适用范围

两个表, 一个叫外部表, 一个叫内部表.

 

如果外部输入非常小,而内部输入非常大并且已预先建立索引,那么嵌套循环联接将特别有效率。

 

关于连接时哪个表为outer表,哪个为inner表,我发现sql server会自动给你安排,和你写的位置无关,它自动选择数据量小的表为outer表, 数据量大的表为inner表。

 

 

2.合并联接(Merge)

指两个表在on的过滤条件上都有索引, 都是有序的, 这样, join时, sql server就会使用Merge join, 这样性能更好.

 

如果一个有索引,一个没索引,则会选择Nested Loops join.

 

 

3.哈希联接(Hash)

如果两个表在on的过滤条件上都没有索引, 则就会使用Hash join.

 

也就是说, 使用Hash join算法是由于缺少现成的索引.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值