truncate,delete与drop的异同点:
相同点:
三者均会删除表内的data。
不同点:
<1> truncate与不带where的delete: 只删除数据,而不删除表的结构(定义)
drop将删除表的结构被依赖的约束(constrain),触发器(trigger), 索引(index);依赖于该表的存储过程/函数将被保留,但其状态 会变为:invalid。
<2>delete语句为DML(data maintain Lanaguage), 这个操作会被放到rollback segment中,事务提交后才生效。如果有相应的tigger,执行的时候将被触发。
truncate,drop是DLL(data define language), 操作立即生效,原数据不放到rollback segment中,不能回滚;操作部触发tigger。
<3>delete语句不影响所占用的extent,高水线(high watermark)保持原位置不动。
drop语句将表所占用的空间全释放掉。
truncate语句缺省情况下将空间释放到minextents个extent,除非使用reuse storage;truncate会将高水线(high watermark)复位(回到最初位置)
<4>速度:
一般而言,drop > truncate > delete。