2010-11-22 95 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,這個聲明將是原子的。

相關問題