我需要在Oracle數據庫中填充大量數據(很多小時加載)的表,並且我想知道哪個更快,在加載之前或加載之後在表上創建索引。我最初認爲在索引表上插入會受到懲罰,但如果我使用完整表創建索引,則需要很長時間。哪個最好?在數據加載之前或之後創建Oracle SQL索引是否更好?
4
A
回答
12
加載數據後創建索引要快得多。如果您將數據加載到包含索引的表中,則由於索引更新不變,加載速度將非常慢。如果您稍後創建索引,則只能有效地填充一次(這可能需要一些時間,但總計應該更小)。
類似的邏輯適用於約束。也可以稍後啓用這些功能(除非您希望數據在約束條件下失敗並且想盡早知道)。
+0
雖然這可能是Oracle SQL的情況,但您應該再次針對每個服務器提出此問題。例如,Sybase IQ首先創建索引的速度更快! – skimania 2011-05-03 23:11:30
2
您可能想要首先創建索引的唯一原因是強制執行唯一約束。否則,使用裸表的加載速度要快得多 - 無索引,無約束,未啓用觸發器。
1
在數據加載之後創建索引是批量加載的推薦做法。您必須確定傳入的數據質量,特別是如果您使用唯一索引。索引的缺失意味着由於存在唯一索引而發生的數據驗證不會發生。 您需要考慮的另一個問題是您是否有一次性負載操作或是否會成爲常規事務?如果是常規事務,則可以在每次數據加載之前刪除索引,並在成功加載後重新創建這些索引。
相關問題
- 1. 在用數據填充表格之前或數據到位之後創建索引是否更好?
- 2. 在創建活動之前或之後加載數據?
- 3. 在添加列之前創建索引與添加列之後創建索引 - 是否重要?
- 4. 在Android應用程序啓動之前或之後創建UI是否更好?
- 5. TSql,在數據輸入之前或之後建立索引
- 6. 搜索引擎在JS加載之前或之後讀取HTML嗎?
- 7. 在空表上創建索引後插入數據或在Oracle上插入數據後創建唯一索引?
- 8. 在添加子元素之前或之後創建文檔樹
- 9. Oracle - 您是否需要在創建索引或添加列之後計算統計信息?
- 10. 在SQL中:根據之前或之後的日期添加列?
- 11. 在Oracle中創建它之前檢查表是否存在
- 12. 在插入數據庫之前或之後格式化數據?
- 13. VueJS:在加載組件之前和之後獲取數據
- 14. 如何前或觸發之後創建一個能趕上DUP_VAL_ON_INDEX在Oracle PL/SQL
- 15. SQL在給定索引之前的最後更改值
- 16. Yii在創建之前檢查數據庫列是否存在
- 17. 應該在函數之前還是之內加載數據集?
- 18. 在TPL數據流中,是否可以在塊創建之後但使用之前更改DataflowBlockOptions?
- 19. 創建ViewModel:在模型數據可用之前或之後執行此操作?
- 20. 在執行setup方法之前,「where」是否加載數據?
- 21. 急SQL:選擇數據之前或日期時間之後
- 22. 過濾之前加入或之後加入SQL
- 23. 在修改內存之前或之後是否引發了段錯誤?
- 24. 在運行刪除/加載數據腳本之前鎖定oracle數據庫
- 25. 在加載數據之前加載ViewController是IOS
- 26. 使用之前是否有缺點:之前&:在CSS之後?
- 27. 是否在創建自由靜態內存之前卸載DLL?
- 28. 在下載之前壓縮數據會更好嗎?
- 29. 在mysql提取之前或之後添加值?
- 30. 上傳之前或之後獲取圖像的創建日期
你是否也考慮過INSERT/* + APPEND * /提示和可能的NOLOGGING? – PenFold 2010-01-29 16:41:31