嵌套循环(NestedLoops )学习笔记

本文介绍了嵌套循环(NestedLoops)的基本要素及其执行过程。嵌套循环涉及到两个表,即驱动表和内部表,通常驱动表数据量较小或经过约束条件筛选。文章还讨论了如何根据索引和数据量选择合适的表作为驱动表。

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

 
1、基本要素。
嵌套循环(NestedLoops)中有两个表,一个是驱动表(又叫外部表),一个是内部表(探查表),驱动表一般是数据量较小或被约束条件筛选后的较小的表,内部表一般是有唯一索引或有高选择性非唯一索引(重复率较低的索引,近似于唯一索引)。
2、执行过程。
嵌套循环(NestedLoops)会先选定一个驱动表(人为指定或者系统根据成本指定),然后就看后面where条件中是否存在驱动表的过滤条件,如果有且该条件在驱动表的索引中(组合索引必须是第一列才能起作用),那么就先根据索引过滤数据行,过滤完后根据rowid读取驱动表的每一行,来跟内部表进行匹配,然后根据内部表的索引读出匹配的行到结果集中,因为能够快速的返回已连接的行(匹配的行),所以嵌套循环的响应时间最快。
 
注:从oracle7开始,引入了基于成本(CBO)的优化器,并且是默认的优化器,所以在嵌套循环时,要综合考虑两个表的数据量、索引等指标。比如数据量较大的表没有索引,数据量较小的表有索引,也许系统会选择数据量较大的表作为驱动表,所以上面所说的都只具有一般性,真正在实践的时候还要具体情况具体分析。由此可见,在设计表的时候,索引的建立的选择性显得尤为重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值