2013-12-10 84 views
3

這兩種操作之間的功能區別是什麼?禁用與丟棄約束

在大型表上插入數據時,我個人會禁用約束。但它是否會對放置約束產生影響?我正在禁用約束,因爲否則插入很慢。

+0

禁用和啓用現有的約束比刪除和創建要簡單得多。 –

回答

3

如果您正在執行數據加載或其他維護,則禁用而不是刪除約束是有意義的。

這個想法是,如果你知道當你完成數據加載或維護,然後禁用它,你將想要得到這個約束。完成後,您可以簡單地啓用它。

你不應該掉線,除非你確信你將來不需要這個限制。丟棄而不是禁用的危險是,當您重新創建約束時,您可能會稍微(或完全)錯誤。如果您只是禁用,那麼就沒有失去約束定義的危險,因爲約束定義仍保留在數據字典中。

+0

好吧。但它在創造/啓用時間方面有什麼不同?只是從嘗試我會說啓用可以更快,這是正確的?還是它沒有區別? – user2428207

+1

好吧,如果你只是啓用,那麼數據字典更新將比創建時少。但是,我想大多數時候,無論您是啓用現有約束還是創建新約束,都將用於驗證。所以,我想我的答案是,它可能(可能?)創建一個新約束而不是啓用現有約束的成本稍高一些,但差異可能不足以影響很大。我不會爲此擔心。 –

+1

請注意,您可能不想「簡單地啓用它」。例如,如果您重新啓用並行索引的約束,該索引不會並行重建,最終度數將被設置回1.如果我沒有記錯,其他索引屬性可能會丟失,可能是壓縮?無論使用哪種方法,都要確保使用DBMS_METADATA.GET_DDL進行測試,以確保索引在前後完全一致。 –