nested loop执行计划如何读?

[复制链接]
查看11 | 回复7 | 2011-11-1 16:26:29 | 显示全部楼层 |阅读模式


QQ截图20120926093418.gif (10.79 KB, 下载次数: 8)
下载附件
explain
2012-9-26 09:34 上传

如上图:
我的理解如下,但又不能确定是否正确,望指正。
先执行ID=5(从T_Region中获取满足条件的数据),此操作返回1Rows
ID=7(从T_FAMILY中获取满足T_FAMILY.REGION_ID=T_REGION.ID的数据),ID=5返回的1条T_REGION.ID对应了49条T_FAMILY.REGION_ID,此操作返回49Rows
ID=3、ID=8时利用T_FAMILY.ID=T_PERSON.FAMILY_ID来循环上面的49条,而这49条T_FAMILY.ID对应了166条T_PERSON.FAMILY.ID(对应着ID=2、ID=9的操作)
ID=1的LOOP迷糊了

谢谢!

回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
我认为5和7是同时进行的,且没有返回真正的数据,返回真正数据是4和6,这两步通过3的NESTED LOOPS方式关联,关联得出的虚表直接与8用2的NESTED LOOPS方式关联,因为此关联在8是通过索引IX_PERSON_FID,所以不用访问表,其结果虚表与9用1的NESTED LOOPS方式关联。
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
本帖最后由 bell6248 于 2012-9-26 16:03 编辑
该执行计划的执行顺序具体如下;
5-->4-->7-->6-->3-->8-->2-->9-->1-->0

具体详细的内容,可以参考oracle documents.
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
看plan直接从首行的缩进就可以判断了,越缩进行数多,其就优先执行,当缩进行数相同时,从上到下执行
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
我记得是:
i_regioni_family 为范例:
i_region 在上,就是 外表, i_family 在下就是内表。
从 外表里面取一条记录,到内表里面匹配。
结束后,作为一个记录集跟其他表匹配。
Oracle Database Performance Tuning Guide10g Release 2 (10.2) B14211-03
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
右上原则
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
先从最右边开始,然后再从最上面开始。
回复

使用道具 举报

千问 | 2011-11-1 16:26:29 | 显示全部楼层
谢谢各位!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行