分享到:
发表于 2009-01-12 13:16:11 楼主 | |
Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 SORT (AGGREGATE) 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'USER_INFO' 3 2 NESTED LOOPS 4 3 TABLE ACCESS (FULL) OF 'USER_NUM_TABLE' 5 3 INDEX (RANGE SCAN) OF 'PK_USER_INFO' (UNIQUE) 请问以上执行计划语句是如何看的?语句的执行顺序是什么?为什么?请祥解,多谢! |
|
楼主热贴 |
发表于 2009-01-12 13:16:11 1楼 | |
难道没有人愿意帮助吗?这前面一排数字怎么看? |
|
发表于 2009-01-12 13:16:11 2楼 | |
从下往上呀,先做4,5,然后做3(nested loop),再做2,然后1 第一个数字是操作顺序号,第2个数字是父操作 |
|
个性签名:
|
发表于 2009-01-12 13:16:11 3楼 | |
什么意思,小弟还是不太明白,望大虾指教! |
|
发表于 2009-01-12 13:16:11 4楼 | |
左边的两列数字,第一列表示这条计划的编号,第二列是这条计划的父计划的编号;如果一条计划有子计划,那么先要执行其子计划; 在这个例子中:从第一条编号为0的(SELECT STATEMENT Optimizer=CHOOSE)开始,他有个子计划1(SORT (AGGREGATE)),然后1有个子计划2,2有子计划3, 3 有子计划4和5,4是3的第一个子计划,所以先执行4(TABLE ACCESS (FULL) OF 'USER_NUM_TABLE'),再执行5(INDEX (RANGE SCAN) OF 'PK_USER_INFO' (UNIQUE)),4和5执行完返回到其父计划3(NESTED LOOPS),3把4和5取到的rows进行nested loops,结果再返回到2,再到1排序,再到0select |
|
发表于 2009-01-12 13:16:11 5楼 | |
哦,原来如此,真是太感谢你了 但是有个问题,我看了一片文章: 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 NESTED LOOPS 2 1 TABLE ACCESS (FULL) OF 'EMP' 3 1 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' 4 3 INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE) 文章中说通过以上分析,可以得出实际的执行步骤是: 1. TABLE ACCESS (FULL) OF 'EMP' 2. INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE) 3. TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' 4. NESTED LOOPS (JOINING 1 AND 3) 好象和你说的不大一样,这是为什么? |
|
发表于 2009-01-12 13:16:11 6楼 | |
其实就是一个树遍历问题,你把执行计划按顺序号,和父计划号划成一棵树,那么执行这条sql实际上就是在遍历这棵树了 |
|
发表于 2009-01-12 13:16:11 7楼 | |
谢谢,那有没有相关详细解释文档可供参考? |
|
发表于 2009-01-12 13:16:11 8楼 | |
关于sql是怎样执行的,几乎所有的数据库教科书都会讲到的 |
|
发表于 2009-01-12 13:16:11 9楼 | |
我的意思是有一个案例一样的,然后通过这个案例详细说明,包括我提到的关于执行顺序等细节问题 |
|
针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员 、 查看帮助 或 给我提意见