ITPub博客

首页 > Linux操作系统 > Linux操作系统 > truncate 和 delete 的区别

truncate 和 delete 的区别

原创 Linux操作系统 作者:0x0x0x 时间:2012-07-02 15:04:53 0 删除 编辑
truncate 和 delete 的区别
 
1、truncate 是清空一张表,相当于delete from table;
 
2、truncate 是DDL,delete是DML操作;
 
3、truncate 表数据后,内存中便不存在这些数据了,除非应用特殊手段来恢复,

而delete掉的数据则继续保留在内存中,仅仅是将数据放在了undo表空间,可以通过回滚方式撤销;
 
4、truncate 后会下调高水位标记(HWM high water mark),而delete不会!
 
5、truncate 只能对table,而delete可以对table、view、synonym;
 
6、truncate 的效率比delete高很多!
 
关于truncate和delete对高水位线的影响实验:

SQL> create table hwm as select * from dba_objects where 1=2;
表已创建。
已用时间:  00: 00: 00.04
SQL> commit;
提交完成。
SQL> analyze table hwm estimate statistics;
表已分析。
已用时间:  00: 00: 00.02
SQL> edit
已写入 file afiedt.buf
  1* select segment_name,blocks from dba_segments where segment_name='HWM'
SQL> /
未选定行
SQL> insert into hwm select * from dba_objects;
已创建73364行。
已用时间:  00: 00: 00.77
SQL> commit;
提交完成。
已用时间:  00: 00: 00.00
SQL> analyze table hwm estimate statistics;
表已分析。
已用时间:  00: 00: 00.09
SQL> edit
已写入 file afiedt.buf
  1* select segment_name,blocks from dba_segments where segment_name='HWM'
SQL> /
SEGMENT_NAME
--------------------------------------------------------------------------------
    BLOCKS
----------
HWM
      1152                                                          -----------高水位线为1152

已用时间:  00: 00: 00.02
SQL> edit
已写入 file afiedt.buf
  1  select blocks,empty_blocks,num_rows from user_tables
  2* where table_name='HWM'
SQL> /
    BLOCKS EMPTY_BLOCKS   NUM_ROWS
---------- ------------ ----------
      1126           26      78064
已用时间:  00: 00: 00.03
SQL> delete from hwm;                                       -----------------删除表数据
已删除73364行。
已用时间:  00: 00: 00.90
SQL> commit;
提交完成。
已用时间:  00: 00: 00.05
SQL> edit
已写入 file afiedt.buf
  1* select segment_name,blocks from dba_segments where segment_name='HWM'
SQL> /
SEGMENT_NAME
--------------------------------------------------------------------------------
    BLOCKS
----------
HWM
      1152                                                     -----------高水位线为1152

已用时间:  00: 00: 00.02
SQL> insert into hwm select * from dba_objects;                -------------重新插入数据做实验
已创建73364行。
已用时间:  00: 00: 00.57
SQL> commit;
提交完成。
已用时间:  00: 00: 00.06
SQL> analyze table hwm estimate statistics;                         -----------分析表
表已分析。
已用时间:  00: 00: 00.05
SQL> edit
已写入 file afiedt.buf
  1* select segment_name,blocks from dba_segments where segment_name='HWM'
SQL> /
SEGMENT_NAME
--------------------------------------------------------------------------------
    BLOCKS
----------
HWM
      1152                                                          -----------高水位线为1152

已用时间:  00: 00: 00.02
SQL> truncate table hwm;                                            ------------用truncate删除
表被截断。
已用时间:  00: 00: 00.97
SQL> commit;
提交完成。
已用时间:  00: 00: 00.00
SQL> analyze table hwm estimate statistics;
表已分析。
已用时间:  00: 00: 00.01
SQL> edit
已写入 file afiedt.buf
  1* select segment_name,blocks from dba_segments where segment_name='HWM'
SQL> /
SEGMENT_NAME
--------------------------------------------------------------------------------
    BLOCKS
----------
HWM
         8                                                    -----------高水位线为8

已用时间:  00: 00: 00.02
SQL>
 
 
 
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26977915/viewspace-734345/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-06-26

  • 博文量
    35
  • 访问量
    92212