2010-01-29 28 views
4

我需要在Oracle數據庫中填充大量數據(很多小時加載)的表,並且我想知道哪個更快,在加載之前或加載之後在表上創建索引。我最初認爲在索引表上插入會受到懲罰,但如果我使用完整表創建索引,則需要很長時間。哪個最好?在數據加載之前或之後創建Oracle SQL索引是否更好?

+0

你是否也考慮過INSERT/* + APPEND * /提示和可能的NOLOGGING? – PenFold 2010-01-29 16:41:31

回答

12

加載數據後創建索引要快得多。如果您將數據加載到包含索引的表中,則由於索引更新不變,加載速度將非常慢。如果您稍後創建索引,則只能有效地填充一次(這可能需要一些時間,但總計應該更小)。

類似的邏輯適用於約束。也可以稍後啓用這些功能(除非您希望數據在約束條件下失敗並且想盡早知道)。

+0

雖然這可能是Oracle SQL的情況,但您應該再次針對每個服務器提出此問題。例如,Sybase IQ首先創建索引的速度更快! – skimania 2011-05-03 23:11:30

2

您可能想要首先創建索引的唯一原因是強制執行唯一約束。否則,使用裸表的加載速度要快得多 - 無索引,無約束,未啓用觸發器。

1

在數據加載之後創建索引是批量加載的推薦做法。您必須確定傳入的數據質量,特別是如果您使用唯一索引。索引的缺失意味着由於存在唯一索引而發生的數據驗證不會發生。 您需要考慮的另一個問題是您是否有一次性負載操作或是否會成爲常規事務?如果是常規事務,則可以在每次數據加載之前刪除索引,並在成功加載後重新創建這些索引。

相關問題