1、机制、效率
truncate是直接把表删除,然后再重建表结构。优点是速度快。比一行一行删除快,但是删除操作记录不记入日志,truncate与drop不能回滚。
delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
2、对表和索引所占空间的影响
truncate后,表和索引所占用的空间会恢复到初始大小。
delete操作不会减少表或索引所占用的空间。
drop语句将表所占用的空间全释放掉。
3、操作对象
truncate和delete只删除数据, drop则删除整个表(结构和数据),truncate只能对table,delete可以是table和view
在速度上,一般来说,drop> truncate > delete。
在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。
如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;
如果想删除表,当然用drop;
如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;
如果和事务有关,或者想触发trigger,还是用delete;
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。