truncate的作用,会删除所有的纪录,会释放使用的空间,以后重新分配,重置high water ,保留表结构,所以,不会产生碎片。

解决方案 »

  1.   

    trauncate 的作用会删除所有的表中记录,而且不会回滚,删除表中的数据之后保留表的结构不变。delete 删除表中的数据,二者的主要区别在于:
    1:前者不会回滚,删除数据速度极快
    2:前者可能在表空间一级产生碎片,后者在表一级产生碎片
      

  2.   

    删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间
      

  3.   

    truncate 速度还优于 delete
      

  4.   

    oraclevbc(多多), bzszp(SongZip)
    解釋的好
      

  5.   

    总结一下,truncate 相对于delete有几大优点。
    1、truncate删除的只是表中数据在库的定义,速度很快。
    2、truncate不生成日志。
    3、truncate可以回归high water ,delete 不能。
    4、truncate也不会产生碎片。缺点
    1、truncate 属于DDL语言,操作后是无法回滚的,所以一定要小心。
      

  6.   

    实质上,truncate只是重置hwm,所以速度很快,相对delete对表空间的影响类似于操作系统的快速fromat命令,用来恢复原始库表结构很有用,而用delete则不会影响hwm的值,只是一个segment一个segmetn地释放所包含的数据块,并因为pct use及pct free的值来决定数据块是否可重用,用得多了当然会产生碎片,不过为了删除一些记录你会用truncate吗?显然不会,可以用将表移动到另一个表空间后drop本表(再移回来:如果你认为有必要)的方法来达到完全消除碎片的目的。如果数据不重要,当然用truncate了,必竟,fromat 而又不产生严重后果的感觉是很爽的,一些又秩序化了吗!
      

  7.   

    truncate 重置high-water,回收空间,而且不记日志,不过不能通过ROLL来恢复,必须重备份中恢复
      

  8.   

    delete可以有where条件,而且可以回滚,不可以回收索引占有的表空间truncate不能根据条件删除,不可以回滚,可以回收索引占有的表空间
      

  9.   

    我们现在有些数据表每天要清空,但是表结构不变。现在的方法是每天drop然后create table as select......,这种方法与truncate 然后insert谁更好呢?
      

  10.   

    补充一点:truncate对于初始化盘区的空间不能回收