Oracle中Truncate和Delete的区别

2016-02-19 16:46 26 1 收藏

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

【 tulaoshi.com - 编程语言 】

  Truncate和Delete的测试

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

  SQL desc t;

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

  名称 是否为空? 类型

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

  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;

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

  COUNT(*)

  ----------

  1000000

  已用时间: 00: 00: 00.03

  SQL select count(*) from t;

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

  COUNT(*)

  ----------

  1000000

  已用时间: 00: 00: 00.03

  7 提交

  SQL commit;

  提交完成。

  已用时间: 00: 00: 00.00

  8 再次测试,在0.02秒左右

  SQL select count(*) from t;

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

  COUNT(*)

  ----------

  1000000

  已用时间: 00: 00: 00.03

  9 删除所有的数据

  SQL delete from t;

  已删除1000000行。

  已用时间: 00: 00: 23.71

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

  SQL select count(*) from t;

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

  COUNT(*)

  ----------

  0

  已用时间: 00: 00: 00.01

  SQL select count(*) from t;

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

  COUNT(*)

  ----------

  0

  11 截断表

  SQL truncate table t;

  表被截断。

  已用时间: 00: 00: 00.29

  12 再次查询,用时为0

  SQL select count(*) from t;

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

  COUNT(*)

  ----------

  0

  已用时间: 00: 00: 00.00

  SQL select count(*) from t;

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

  COUNT(*)

  ----------

  0

  已用时间: 00: 00: 00.00

  SQL

  13 结论

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

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

来源:http://www.tulaoshi.com/n/20160219/1613082.html

延伸阅读
内容或简介: /** 调用数据库里的一个函数 一个函数本质上一个返回一个结果的存储过程,这个例子示范了怎么调用有in、out和in/out参数的函数 ***********************************/ CallableStatement cs; try { // 调用一个没有参数的函数; 函数返回 a VARCHAR // 预处理callable语句 ...
1、Hashtable是Dictionary的子类, 代码如下:  public class HashtableK,V      extends DictionaryK,V      implements MapK,V, Cloneable, java.io.Serializable HashMap: 代码如下: public class HashMapK,V     extends AbstractMapK,V      imple...
class A { }  class B extends A { }  Object o1 = new A();  Object o2 = new B();  o1 instanceof A = true  o1 instanceof B = false  o2 instanceof A = true // ================ HERE  o2 instanceof B = true  o1.getClass().equals(A.class) = true  o1.getClass().equals(...
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==),比较的是他们的值。 2.复合数据类型(类)   当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结...
print()方法在输出括号里指定的字符串后就结束操作,而不再添加回车,光标停留在字符串最后一个字符的右边,println()则是添加回车,光标停在下一行。 for(i=1;i6;i++) println(i); 结果: 1 2 3 4 5 for(i=1;i6;i++)   print(i); 结果:12345 "ln"就是“line”去掉元音字母的简写

经验教程

401

收藏

28
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部