Oracle中Truncate和Delete的区别

國笢大菟孖》

國笢大菟孖》

2016-02-19 16:46

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享Oracle中Truncate和Delete的区别吧。

  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(*)

  ----------

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  1000000

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  已用时间: 00: 00: 00.03

  SQL select count(*) from t;

  COUNT(*)

  ----------

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  1000000

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  已用时间: 00: 00: 00.03

  7 提交

  SQL commit;

  提交完成。

  已用时间: 00: 00: 00.00

  8 再次测试,在0.02秒左右

  SQL select count(*) from t;

  COUNT(*)

  ----------

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  1000000

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  已用时间: 00: 00: 00.03

  9 删除所有的数据

  SQL delete from t;

  已删除1000000行。

  已用时间: 00: 00: 23.71

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

  SQL select count(*) from t;

  COUNT(*)

  ----------

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  0

  已用时间: 00: 00: 00.01

  SQL select count(*) from t;

  COUNT(*)

  ----------

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  0

  11 截断表

  SQL truncate table t;

  表被截断。

  已用时间: 00: 00: 00.29

  12 再次查询,用时为0

  SQL select count(*) from t;

  COUNT(*)

  ----------

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  0

  已用时间: 00: 00: 00.00

  SQL select count(*) from t;

  COUNT(*)

  ----------

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  0

  已用时间: 00: 00: 00.00

  SQL

  13 结论

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

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

展开更多 50%)
分享

猜你喜欢

Oracle中Truncate和Delete的区别

编程语言 网络编程
Oracle中Truncate和Delete的区别

详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始

编程语言 网络编程
详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

C++中delete和delete[]的区别说明

编程语言 网络编程
C++中delete和delete[]的区别说明

C++中delete和delete[]的区别详细介绍

编程语言 网络编程
C++中delete和delete[]的区别详细介绍

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Oracle中spfile和pfile间区别和联系

编程语言 网络编程
Oracle中spfile和pfile间区别和联系

Oracle查询 rownum和rowid的区别

编程语言 网络编程
Oracle查询 rownum和rowid的区别

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Oracle 数据库的备份与恢复

Oracle 数据库的备份与恢复

让你的PHP4和PHP5共存

让你的PHP4和PHP5共存
下拉加载更多内容 ↓