实例对比Oracle中truncate和delete的区别

本文对比了Oracle中truncate和delete操作的区别,包括回滚能力、高水线、空间利用和效率。通过实例展示了这两种操作在不同场景下的表现。

删除表中的数据的方法有delete,truncate,

它们都是删除表中的数据,而不能删除表结构,delete 可以删除整个表的数据也可以删除表中某一条或N条满足条件的数据,truncate只能删除整个表的数据,一般我们把delete 操作收作删除表,truncate操作叫作截断表.

truncate操作与delete操作对比

操作

回滚

高水线

空间

效率

delete

可以

不变

不回收

 

下面分别用实例查看它们的不同

1.回滚

首先要明白两点

1.在oracle 中数据删除后还能回滚是因为它把原始数据放到了undo表空间,

2.DML语句使用undo表空间,DDL语句不使用undo,deleteDML语句,truncateDDL语句,别外DDL语句是隐式提交.

所以truncate操用不能回滚,delete操作可以.

两种操作对比(首先新建一个表,并插入数据)

  2  (

  4  );

SQL> insert into t values(10);

Commit complete.

         I

        10

Delete删除,然后回滚

1 row deleted.

no rows selected

SQL> rollback;

SQL> select * from t;

----------

SQL> truncate table t;

SQL> rollback;

SQL> select * from t;

SQL> analyze table t estimate statistics;

SQL> select segment_name,blocks from dba_segments where segment_name=upper('t');

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

SQL> select table_name,blocks,empty_blocks from user_tables where table_name=upper('t');

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

SQL> delete from t;

SQL> commit;

SQL> analyze table t estimate statistics;

SQL> select table_name,blocks,empty_blocks from user_tables where table_name=upper('t');

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

SQL> truncate table t;

SQL> analyze table t estimate statistics;

SQL> select table_name,blocks,empty_blocks from user_tables where table_name=upper('t');

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

SQL> set timing on;

  2  for i in 1..100000 loop

  4  commit;

  6  end;

PL/SQL procedure successfully completed.

SQL> delete from t;

Elapsed: 00:00:20.09

Truncate 截断表

SQL> rollback;

Elapsed: 00:00:17.36

  COUNT(*)

    100000

SQL> truncate table t;

Elapsed: 00:00:00.20

可见删除同一个大小的表,delete用了20.09秒,而truncate只用了0.2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值