数据库表连接原理

【连接查询的过程】
步骤1:先确定第一个需求查询的表(驱动表),驱动表根据where条件进行筛选。
步骤2:被关联的表(被驱动表),从驱动表每查询到一条记录,就去被驱动表查询匹配的记录(筛选条件是on 和 where )

内连接:inner join 驱动表中的记录在被驱动表中找不到,则该记录不会写入最后的结果集
外连接:outer join 驱动表中的记录在被驱动表中找不到,也会写入结果集(被驱动表记录的各个字段使用NULL填充)。 左外连接、右外连接

不管内连接还是外连接,驱动表都只会被访问一遍,而被驱动表的访问次数取决于驱动表执行单表查询后的结果集中的记录数。

【基于块的嵌套循环连接】
背景:表的数据量特别庞大的时候,反复对被驱动表进行全表扫描,磁盘I/O代价非常大。 
解决方向:驱动表结果集中有多少条记录,就可能把被驱动表从磁盘加载到内存中多少次。可以在被驱动表中的记录加载到内存时,一次性地与驱动表中的多条记录进行匹配。这样减少从磁盘上加载被驱动表的代价。
Join Buffer(连接缓冲区):在执行连接查询前申请的一块固定大小的内存。先把若干条驱动表结果集的记录装在这个Join Buffer中,然后开始扫描被驱动表,每一条被驱动表的记录一次性地与Join Buffer中多条驱动表记录进行匹配。由于匹配过程在内存中完成,所以可以显著减少被驱动表地磁盘I/O代价。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值