我们需要在删除之前截断一个大表吗?

时间:2010-11-22 09:45:23

标签: oracle

据说我们应该在删除之前截断一个大表,它会提高性能。这是真的吗?

3 个答案:

答案 0 :(得分:10)

IMO一般来说,如果您只是想放弃一张桌子,那么DROP是合适的。它将以与TRUNCATE相同的方式释放空间,并且它具有原子的优势(没有查询将有机会看到表“空”)。

从10g +起,删除的表格不会立即被删除:如果有足够的空间,它将被放入recycle bin。如果先截断表,则回收站中不会保留任何数据。这可能就是为什么你被告知要先截断(?)。

在任何情况下,如果您想绕过回收站,您可以发出DROP TABLE your_table PURGE,此语句将是原子的。

答案 1 :(得分:1)

完全取决于你是否希望能够在出现问题时回滚。

删除数据会记录删除数据库的事务日志,直到您提交更改为止。

Truncation会删除表中的所有数据而不记录这些日志,因此在执行此操作时可以显着提高性能。只要确定你知道自己在做什么,因为无法回头。

答案 2 :(得分:0)

重置高水位标记可能是一个好主意。