1.truncate在各种表上无论是大的还是小的都非常快。如果有rollback命令,delete将会被撤销,而truncate不会被撤销。
2.truncate是一个ddl语言,向其他所有的dll语言一样,被隐式的提交,不能对truncate使用rollback命令
3.truncate将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时。进过truncate操作后的表比delete操作后的表要快的多。
4.truncate不能触发任何delete触发器
5.不能授予任何人清空他人的表的权限
6.当表被清空后,表和表的索引将重新设置成初始大小,而delete不能。
7.不能清空父表。
a.oracle中,delete语句是一种标注动作。在执行过程中,数据库会访问每个符合删除条件的数据行进行标注动作,标记为“已删除”,删除的数据范围越大、执行路径越长,执行sql语句的时间也就越长。所以,delete是一个跟数据规模成正比的执行过程。
b.truncate操作最多接触的知识点是ddl本质。Truncate操作下,数据库并不关注每个数据行和数据范围,而是集中修改端头结构、更新核心数据字典上。对于巨大数据量的表,明显要快于delete。另外,truncate不能删除一个带有外键的表,如果要删除,需要首先取消外键。
Else:truncate操作只产生极少的日志,这些日志不足以rollback,通常认为,truncate操作时不可恢复的,除非使用备份数据进行不完全恢复,或者falshback database。
对于truncate和drop的操作效率:对表毫秒级的truncate没有影响,也就是说大表小表的操作效率来讲是一样的。而对于drop,由于是写日志的,在数据量大的时候回比较慢一点。