【表连接方式】

对于三种连接,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算法是由于缺少现成的索引.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值