Oracle 我们是否需要在删除前截断一个大表?

Oracle 我们是否需要在删除前截断一个大表?,oracle,Oracle,据说我们应该在删除前截断一个大表,这样可以提高性能。这是真的吗?这完全取决于您是否希望在出现问题时能够回滚 删除数据记录对数据库事务日志的删除,直到您提交更改为止 截断将删除表中的所有数据,而不记录这些日志,因此这样做可以显著提高性能。只需确保你知道自己在做什么,因为没有回头路。重置高水位线可能是个好主意。通常,如果你只是想放下一张桌子,那么放下是合适的。它将以TRUNCATE相同的方式释放空间,并且具有原子性的优点(没有查询有机会看到表“空”) 但是,从10g+中删除的表不会立即被删除:如果有

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

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

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


截断将删除表中的所有数据,而不记录这些日志,因此这样做可以显著提高性能。只需确保你知道自己在做什么,因为没有回头路。

重置高水位线可能是个好主意。

通常,如果你只是想放下一张桌子,那么
放下
是合适的。它将以
TRUNCATE
相同的方式释放空间,并且具有原子性的优点(没有查询有机会看到表“空”)

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


在任何情况下,如果您想绕过回收站,您可以发出
删除表清除
,此语句将是原子语句。

“提高性能”-以何种方式?您是指整个数据库的性能,还是说删除该表会更快?另请参见
drop table
也不会记录日志,是吗?OP没有提到
delete
。很好。我假设他在谈论截断本身的性能。你现在可以开始嘲笑我,向我的房子扔石头了drop table可以记录日志——例如,如果配置/启用了“flashback”,则可以恢复已删除的表。嗯,不是真的——一旦删除了表,就没有HWM。