一条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关闭了,重新启动,查看执行计划,结果依然不变。
这让我感觉到十分困惑,求解,希望各位大侠不吝赐教,不胜感激。

解决方案 »

  1.   

    不好意思,发现直接复制粘贴上去的执行计划,顺序不容易看,再次补充下。
    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
      

  2.   

    哦,谢谢啦,应该以sqlplus的为准吧。
      

  3.   


    其实这个东西也不好说 不知道plsql的内部  还是以oracle 自动的sqlplus为准吧