日志记录
- delete:删n行,并将删除操作作为事务记录在日志,以便回滚。
- truncate:删除所有数据,并不将删除操作记录在日志。速度快
表和索引空间占用
- delete:不会减少表或索引所占用的空间,删除数据。(产生数据碎片)
- truncate:表和索引所占用的空间会恢复到初始大小,删除数据内容。
- drop:语句将表所占用的空间全释放掉,删除结构和数据。
应用范围
- delete:针对table和view;
- truncate:针对table;由 FOREIGN KEY 约束引用的表,不能使用;
- drop:针对表、视图、索引,触发器,约束;过程、函数保留(变成invalid状态)
运行速度
- drop > truncate > delete
查询类型:
- delete是DML:手动提交(commit),删除操作记录在redo和undo表空间中(内容拷贝到undo,动作记录到redo),可以rollback。操作会被放到 rollback segment中,事务提交后才生效。
- truncate是DDL:会隐式提交,不能回滚,不会触发触发器。原数据不放到 rollback segment中。
- drop是DDL:会隐式提交,不能回滚,不会触发触发器。原数据不放到 rollback segment中。