关于SQL"EXPLAIN PLAN 分析SQL语句" 中查看执行步骤问题

spiketang 2005-03-09 10:43:26
SQL> list
1 SELECT *
2 FROM dept, emp
3* WHERE emp.deptno = dept.deptno
SQL> set autotrace traceonly /*traceonly 可以不显示执行结果*/
SQL> /
14 rows selected.
Execution Plan
----------------------------------------------------------
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)

Statistics
----------------------------------------------------------
0 recursive calls
2 db block gets
30 consistent gets
0 physical reads
0 redo size
2598 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
14 rows processed
通过以上分析,可以得出实际的执行步骤是:
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)


怎么样才可以看出执行步骤是这样的呀?
...全文
243 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzszp 2005-03-15
  • 打赏
  • 举报
回复
书上写得也没什么问题
TABLE ACCESS (FULL) OF 'EMP'

INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)
属于最先执行的操作

spiketang 2005-03-14
  • 打赏
  • 举报
回复
一般情况都是倒读这个顺序的,
Execution Plan
----------------------------------------------------------
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) ”
所以我才不明白!难道是人家写错了,但是写的错的话,这样的顺序也太离普了吧!
zrb007 2005-03-11
  • 打赏
  • 举报
回复
我也不太会读这个分析结果,bzszp的说明是什么意思呢?我知道一个简单的查看执行计划步骤的办法是在oracle 的 enterprise manager console里面对每个sql都可以查看其计划,点击下一步就可以自动跳到那一步去。具体就是双击一个会话,弹出的窗口中选“sql”tab栏
wwllzpz 2005-03-11
  • 打赏
  • 举报
回复
0 SELECT STATEMENT Optimizer=CHOOSE --这是最后一步,得结果
1 0 NESTED LOOPS --这是第四步,nested
2 1 TABLE ACCESS (FULL) OF 'EMP' --这是第三步,全表扫描
3 1 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' --这是第二步,通过ROWID访问表
4 3 INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE) --这是第一步,先index scan
bzszp 2005-03-09
  • 打赏
  • 举报
回复
0 SELECT STATEMENT Optimizer=CHOOSE --ok!
1 0 NESTED LOOPS --nested
2 1 TABLE ACCESS (FULL) OF 'EMP' --3:full scan
3 1 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' --2:rowid scan
4 3 INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE) --1:index scan

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧