首页 > 代码库 > delete和truncate

delete和truncate

delete table a

truncate table b

用truncate删除表比delete删除表   逻辑读和cost都有明显的减少

delete 删除并不能释放空间,虽然将很多块的记录删除,但空间依然会保留,oracle在查询时,依然会查询这些块

而truncate是一种释放高水平位的动作,这些空快被回收,空间也就释放掉了。

例子

我们要统计某个大楼的人数,从第1楼道20楼,每个房间都打开检查一下,发现实际情况是一个人都没有。

但问题是打不开房间我们怎么知道没有人呢。这就是delete后空块的情况。

truncate是我们想统计大楼的人数,结果发现该大楼被铲平了,啥房间也没有,很快得到了没有人的结论。

truncate 是ddl操作  而非dml

truncate 后面是不带条件的  

如 truncate table a where ...是不行的。

但是如果在表中这些where条件能形成有效地分区,oracle支持在分区表中做truncate分区的。

命令 alter table t truncate partition ‘分区名‘;

这是分区表最实用的功能的功能,高效清理数据,释放空间