看完这章你会学习到以下内容:
- 它们的共同点
- 它们的不同点
相同点:
它们都可以删除数据,清理那些无关紧要,与业务无关的数据。
不同点:
1. 语句方面
- delete 语句是 dml, 这个操作会放到 rollback segement 中, 事务提交之后才生效; 如果有相应的 trigger, 执行的时候将被触发.
- truncate,drop 是 ddl, 操作立即生效, 原数据不放到 rollback segment 中, 不能回滚. 操作不触发 trigger.
2. 删除内容方面
- truncate 和 delete 只删除数据不删除表的结构(定义)
- drop 语句将删除表的结构被依赖的约束(constrain), 触发器(trigger), 索引(index);
- delete/drop 可以删除视图,索引,触发器等,truncate 只针对表。
3. 高水位 HWM
- delete 语句不影响表所占用的区(Extent), 高水线保持原位置不动。
- drop 语句将表所占用的空间全部释放。
- truncate 语句缺省情况下将空间释放到 minextents 个 extent, 除非使用 reuse storage; truncate 会将高水线复位(回到最开始).
4. 速度方面
- 一般来说: drop> truncate > delete