SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Solaris: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL>
SQL> drop table t;
Table dropped.
SQL>
SQL> create table t
2 as
3 select rownum id,
4 a.*
5 from all_objects a where rownum <= 1000;
Table created.
SQL>
SQL> create index t_ix on t(id);
Index created.
SQL>
SQL> execute dbms_stats.gather_table_stats(user,'t', cascade=>true);
PL/SQL procedure successfully completed.
SQL>
SQL> select count(*) from t;
COUNT(*)
----------
1000
SQL>
SQL>
SQL> set autotrace traceonly explain
SQL> delete from t where id >=500;
501 rows deleted.
Execution Plan
----------------------------------------------------------
Plan hash value: 2466302700
--------------------------------------------------------------------------
Id Operation Name Rows Bytes Cost (%CPU) Time
--------------------------------------------------------------------------
0 DELETE STATEMENT 502 2008 3 (0) 00:00:01
1 DELETE T
* 2 INDEX RANGE SCAN T_IX 502 2008 3 (0) 00:00:01
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ID">=500)
SQL>
SQL> set autotrace off
SQL>
SQL> select count(*) from t;
COUNT(*)
----------
499
I also tested "explain plan for". We see the delete statement is not actually executed in this case.
SQL>
SQL> explain plan for
2 delete from t;
Explained.
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
Plan hash value: 2034385699
---------------------------------------------------------------------------
Id Operation Name Rows Bytes Cost (%CPU) Time
---------------------------------------------------------------------------
0 DELETE STATEMENT 1000 4000 5 (0) 00:00:01
1 DELETE T
2 TABLE ACCESS FULL T 1000 4000 5 (0) 00:00:01
---------------------------------------------------------------------------
9 rows selected.
SQL> select count(*) from t;
COUNT(*)
----------
499
No comments:
Post a Comment