查看执行计划,sqlplus和pl/sql对同一sql语句执行计划差别很大

dut703 2010-09-24 11:18:10
一条sql语句,如下:
delete from ifs_ext_branch a
where a.brid>(select min(b.brid)
from ifs_ext_branch b
where a.brid=b.brid)
;
其中brid列上有唯一索引,我在命令行上使用sqlplus查看执行计划,如下所示:

----------------------------------------------------------
Plan hash value: 3157192699

--------------------------------------------------------------------------------
--------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Ti
me |

--------------------------------------------------------------------------------
--------

| 0 | DELETE STATEMENT | | 1 | 23 | 1 (0)| 00
:00:01 |

| 1 | DELETE | IFS_EXT_BRANCH | | | |
|

| 2 | NESTED LOOPS | | 1 | 23 | 1 (0)| 00
:00:01 |

| 3 | VIEW | VW_SQ_1 | 12 | 192 | 1 (0)| 00
:00:01 |

| 4 | SORT GROUP BY | | 12 | 84 | 1 (0)| 00
:00:01 |

| 5 | INDEX FULL SCAN| INDX_BRANCH_BRID | 12 | 84 | 1 (0)| 00
:00:01 |

|* 6 | INDEX RANGE SCAN | INDX_BRANCH_BRID | 1 | 7 | 0 (0)| 00
:00:01 |
然后使用pl/sql查看执行计划,如下所示:

DELETE STATEMENT, GOAL = ALL_ROWS 6 1 23
DELETE SYSTEM IFS_EXT_BRANCH
HASH JOIN 6 1 23
VIEW SYS VW_SQ_1 3 12 192
SORT GROUP BY 3 12 84
TABLE ACCESS FULL SYSTEM IFS_EXT_BRANCH 2 12 84
TABLE ACCESS FULL SYSTEM IFS_EXT_BRANCH 2 12 84
感觉pl/sql的执行计划有问题,不知道是pl/sql的bug还是?
并且把pl/sql关闭了,重新启动,查看执行计划,结果依然不变。
这让我感觉到十分困惑,求解,希望各位大侠不吝赐教,不胜感激。
...全文
443 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dut703 2010-09-25
  • 打赏
  • 举报
回复
哦,谢谢啦,应该以sqlplus的为准吧。
心中的彩虹 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 dut703 的回复:]
一条sql语句,如下:
delete from ifs_ext_branch a
where a.brid>(select min(b.brid)
from ifs_ext_branch b
where a.brid=b.brid)
;
其中brid列上有唯一索引,我在命令行上使用sqlplus查看执行计划,如下所示:

--------------------------……
[/Quote]

其实这个东西也不好说 不知道plsql的内部 还是以oracle 自动的sqlplus为准吧
dawugui 2010-09-24
  • 打赏
  • 举报
回复
这不同的工具,其执行过程肯定不一样。
dut703 2010-09-24
  • 打赏
  • 举报
回复
不好意思,发现直接复制粘贴上去的执行计划,顺序不容易看,再次补充下。
sqlplus下看的执行计划:

Plan hash value: 3157192699

--------------------------------------------------------------------------------
--------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Ti
me |

--------------------------------------------------------------------------------
--------

| 0 | DELETE STATEMENT | | 1 | 23 | 1 (0)| 00
:00:01 |

| 1 | DELETE | IFS_EXT_BRANCH | | | |
|

| 2 | NESTED LOOPS | | 1 | 23 | 1 (0)| 00
:00:01 |

| 3 | VIEW | VW_SQ_1 | 12 | 192 | 1 (0)| 00
:00:01 |

| 4 | SORT GROUP BY | | 12 | 84 | 1 (0)| 00
:00:01 |

| 5 | INDEX FULL SCAN| INDX_BRANCH_BRID | 12 | 84 | 1 (0)| 00
:00:01 |

|* 6 | INDEX RANGE SCAN | INDX_BRANCH_BRID | 1 | 7 | 0 (0)| 00
:00:01 |
,顺序5436210
pl/sql下执行计划:

0DELETE STATEMENT, GOAL = ALL_ROWS 6 1 23
1 DELETE SYSTEM IFS_EXT_BRANCH
2 HASH JOIN 6 1 23
3 VIEW SYS VW_SQ_1 3 12 192
4 SORT GROUP BY 3 12 84
5 TABLE ACCESS FULL SYSTEM IFS_EXT_BRANCH 2 12 84
6 TABLE ACCESS FULL SYSTEM IFS_EXT_BRANCH 2 12 84
顺序5436210

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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