1、表和索引所占空间
delete操作不会减少表或者索引所占对空间。
truncate表之后,对应表和索引占用对空间会恢复到初始大小。
drop语句则将表所占用对空间全部释放掉。
2、删除速度
drop > truncate > delete
3、使用范围
truncate只针对table操作,delete可以是table和view,另外truncate和delete是只删除数据,drop则是删除整个表(结构+数据)。
4、DML(Data Manipulation Language))与DDL(Data Definition Language)
delete语句为DML,这个操作会被放到 rollback segment中,事务提交后才生效。如果有相应的 tigger,执行的时候将被触发。
truncate、drop是DLL(data define language),会隐式提交,操作立即生效,原数据不放到 rollback segment中,不能回滚 。
5、truncate table tableName 速度快且效率高原因
truncate table在功能上与不带where条件对delete语句相同,两者均删除表中对全部行。但是truncate table比delete使用的系统和食物日志资源少。delete语句每删除一行,就要在事物日志中为其所删除的每行做记录项。truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事物日志中记录页的释放。