ITPub博客

首页 > Linux操作系统 > Linux操作系统 > drop、delete 与truncate

drop、delete 与truncate

原创 Linux操作系统 作者:ljm0211 时间:2012-06-20 13:44:41 0 删除 编辑

要删除一个表,你可以使用SQL语句DROP TABLE。例如,又从数据库中彻底删除表mytable,你要使用如下的语句:

           DROP TABLE mytable

truncate操作 同没有where条件的delete操作十分相似,只是把表里的信息全部删除,单是表依然存在。

1、无论truncate大表还是小表速度都非常快。delete要产生回滚信息来满足回滚需求,而truncate是不产生的。

2、truncate是DDL语句进行隐式提交,不能进行回滚操作。

3、truncate重新设定表和索引的HWM(高水标记),由于全表扫描和索引快速扫描都要读取所有的数据块知道HWM为止。所以全表扫描的性能不会因为delete而提高,但是经过truncate操作后速度会很快。

4、truncate不触发任何delete触发器。

5、不能赋给某个用户truncate其它用户表的权限。如果需要trucate其它用户表的权限必须对该用户赋DROP ANY TABLE权限。

6、当表被truncate后,这个表和索引所占用的空间会恢复到初始大小,而delete操作不会减少表或索引所占用的空间。

7、不能truncate一个带有外键的表,如果要删除首先要取消外键,然后再删除。

TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE

在默认是 DROP STORAGE 当使用DROP STORAGE时将缩短表和表索引,将表收缩到最小范围,并重新设置NEXT参数。REUSE STORAGE不会缩短表或者调整NEXT参数在特殊情况下使用 REUSE STORAGE

    一个实际应用的典型例子:
你用sqlldr加载一个1000万记录的数据表,但是加载了多一半的时候你发现有问题,
这个时候你想清空表重新加载。
那么最好 reuse storage ,这样再次加载就不需要再次寻找空闲空间了

    DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的的删除操作作为事务记录在日志中保存以便进行进行回滚操作。

    TRUNCATE TABLE 则一次性地从表中删除所有的数据页并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

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

上一篇: DUMP函数
请登录后发表评论 登录
全部评论

注册时间:2009-05-14

  • 博文量
    272
  • 访问量
    436863