点击这里给我发消息 点击这里给我发消息
首页 > 行业资讯 > Oracle>详细内容

Oracle中Truncate和Delete的区别

添加时间:2011-6-25
    相关阅读: SQL Oracle

Truncate和Delete的测试

  1 一个只有一列的最简单的表

  SQL> desc t;

  名称 是否为空? 类型

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

  A VARCHAR2(200)

  2 清理以前的数据

  SQL> truncate table t;

  表被截断。

  3 打开时间显示

  SQL> set timing on;

  4 查看当前情况

SQL> select count(*) from t;
COUNT(*)
----------
0

  已用时间: 00: 00: 00.00

  5 向里面插入100万数据

SQL> begin
2 for i in 1 .. 1000000
3 loop
4 insert into t values(i);
5 end loop;
6 end;
7 /

  PL/SQL 过程已成功完成。

  已用时间: 00: 00: 34.42

  6 检查数据情况,注意使用的时间在0.03秒左右

  SQL> select count(*) from t;

  COUNT(*)

  ----------

  1000000

  已用时间: 00: 00: 00.03

  SQL> select count(*) from t;

  COUNT(*)

  ----------

  1000000

  已用时间: 00: 00: 00.03

  7 提交

  SQL> commit;

  提交完成。

  已用时间: 00: 00: 00.00

  8 再次测试,在0.02秒左右

  SQL> select count(*) from t;

  COUNT(*)

  ----------

  1000000

  已用时间: 00: 00: 00.03

  9 删除所有的数据

  SQL> delete from t;

  已删除1000000行。

  已用时间: 00: 00: 23.71

  10 再次测试,大约在0.01秒左右

  SQL> select count(*) from t;

  COUNT(*)

  ----------

  0

  已用时间: 00: 00: 00.01

  SQL> select count(*) from t;

  COUNT(*)

  ----------

  0

  11 截断表

  SQL> truncate table t;

  表被截断。

  已用时间: 00: 00: 00.29

  12 再次查询,用时为0

  SQL> select count(*) from t;

  COUNT(*)

  ----------

  0

  已用时间: 00: 00: 00.00

  SQL> select count(*) from t;

  COUNT(*)

  ----------

  0

  已用时间: 00: 00: 00.00

  SQL>

  13 结论

  数据被删除后,高水平线(high-water mark,HWM)并没有复位只是那些空间不再使用而已,再次查询依然会读取HWH以前的块查找是否有可用的数据。而截断表将复位HWH,告诉这些空间没有保存数据。

  所以,如果允许截断表(注意:会产生事务提交),则truncate操作比delete操作的结果更好

本文作者:未知
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册