2010-11-22 98 views
3

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

+1

“是说”谁? – skaffman 2010-11-22 09:48:12

+2

“提高性能” - 以什么方式?你是指整个数据库的性能,还是你的意思是删除该表会更快? – darioo 2010-11-22 09:50:01

+0

另请参阅http://dba.stackexchange.com/questions/4163/why-use-both-truncate-and-drop – rogerdpack 2014-07-17 17:30:38

回答

1

这完全取决于您是否想要在出现问题时能够回滚。

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

截断从表中删除所有数据而不记录这些日志,因此可以在此过程中显着提高性能。只要确定你知道你在做什么,因为没有回头路。

+1

'drop table'不记录日志,是吗? OP没有提及“删除”。 – skaffman 2010-11-22 09:55:03

+0

好点。我假设他在谈论截断本身的性能。你现在可以继续嘲笑我,把石头扔在我家里。 :) – Jason 2010-11-22 09:59:59

+0

删除表可以记录日志 - 例如“闪回”可以恢复删除的表,如果已配置/启用。 – rogerdpack 2014-07-17 16:03:38

0

这可能是一个好主意,以重置高位标记。

+4

好吧,不是真的 - 一旦桌子掉在那里*是*没有HWM。 – 2010-11-22 11:49:22

10

国际海事组织一般如果你只是想删除一个表,然后DROP是适当的。它将以与TRUNCATE相同的方式释放空间,并且它将具有原子化的优势(没有查询将有机会看到表“空”)。

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

在任何情况下,如果你想绕过回收站,你可以发出DROP TABLE your_table PURGE,这个声明将是原子的。

相关问题