我在表中插入了數百萬條記錄,這樣的操作將需要數小時甚至一天的時間。 2小時後,通過我的電腦連接斷開,所以我想從頭開始重複插入。
我的問題
哪個更快?截斷表並重復一次,或創建主鍵並繼續,但是由於在過去2小時內插入的每條記錄都存在'違反唯一約束',因此會引發錯誤。違反錯誤性能的唯一約束條件
回答
截斷表(如果完全刷新)是最好的選擇。如果使用Oracle的SQL*Loader
實用程序,還有SKIP
參數。讓我在一定程度上解釋!
另請嘗試使用加載選項DIRECT
加載SQL * Loader表。這意味着通過加載到數據塊而不是傳統的INSERT
語句來加載表。
通過這種負載,可以啓用UNRECOVERABLE
,這意味着沒有/較少的重做日誌寫的,因此加載速度非常快> 70比傳統INSERT
%。
但是,這種裝載的缺點是,此表上的所有索引,除了NULL
約束將進行UNUSABLE,裝載開始前,數據將被加載。並且在SUCCESSFUL完成時,SQL*Loader
試圖通過重建它來重新啓用索引。所以,如果萬一我的任何原因,加載已經中斷,錯誤信息將被正確記錄,並且索引將被保留爲UNUSABLE。
的更多詳細信息:請找Here
(DIRECT
/CONVENTIONAL
加載)
此外,使用SQL*Loader
,您可以加載使用Conventional
加載,這意味着SQL*Loader
將使用該文件生成的INSERT的塊,並且過程它。在這種類型的加載中,所有的INDEXES都將保持原樣,並且表格仍然沒有受到傷害。
如果發生任何錯誤,SQL*Loader
將記錄一個SKIP
參數,這意味着,如果您指定該數字,則在下一次運行時,將從該文件的該點加載該表。
更多細節SQL*Loader
:Here
我正在運行pl/sql,所以我cannut使用sql * loader但是很好的解釋。 – Moudiz
- 1. 違反唯一鍵約束
- 2. 違反唯一約束?
- 3. 錯誤:重複的鍵值違反PostgreSQL中的唯一約束條件
- 4. 唯一違規:7錯誤:重複鍵值違反唯一約束「users_pkey」
- 5. ORA-00001:違反的唯一約束(DEV.X_PK)
- 6. Django的關鍵違反唯一約束
- 7. ORA-00001違反的唯一約束(string.string)
- 8. 一般錯誤:1 OCIStmtExecute:ORA-00001:違反唯一約束(HR.SYS_C004023)?
- 9. PostgreSQL的:錯誤重複鍵值違反唯一約束
- 10. 錯誤:重複的鍵值違反了唯一約束「xak1fact_dim_relationship」
- 11. spring中的hibernate錯誤MVC.java.sql.BatchUpdateException:唯一約束(OVERFLOW.SYS_C004914)違反
- 12. Django - 重複鍵值違反了唯一約束條件
- 13. cakephp插入違反唯一約束條件
- 14. 更新操作違反唯一約束條件
- 15. 合併導致違反唯一約束
- 16. 00001. 00000 - 「唯一約束(%s。%s)違反」
- 17. 重複鍵值違反唯一約束
- 18. 唯一約束違反了空表
- 19. 違反處理唯一約束(SYSTEM.SYS_C006997)
- 20. ORA 000001唯一約束違反
- 21. ORA-00001:唯一約束(TEST.SALES_PK)違反
- 22. INSERT INTO ..選擇..違反唯一約束
- 23. PG :: UniqueViolation:錯誤:重複鍵值違反唯一約束
- 24. 錯誤:重複鍵違反唯一約束「search6_idx1」
- 25. 當我有一個非唯一索引時違反了唯一約束條件
- 26. 違反約束?
- 27. MySQL - 刪除違反唯一性約束的數據
- 28. Hibernate違反UNIQUE KEY約束條件
- 29. 違反日誌列約束條件
- 30. 違反MySql約束條件。插入
你是如何做插入?爲什麼從一開始就重複如果已經提交了一些數據 - 不會從第一次插入的第一個記錄開始更有意義? (希望你一次不插入/提交一行......並且沒有任何索引或觸發器)。 –
@AlexPoole我有一張包含數百萬條記錄的表格,我想將它分成4個表格。原始表具有日期欄(第1年2年3年和第4年),因此每年在原表中將數據插入表1。所以在我的場景中,我將orignal的數據插入到4個表中。 – Moudiz
但是由什麼機制?你正在做'insert into new_table_1 select ... from orig_table where year = ...',或者選擇所有的記錄,循環它們,然後決定哪個表格可以逐一插入每條記錄?在什麼環境/語言中 - 聽起來你可能把整個表格通過網絡拉回到你的電腦,然後將它推回到四個新表格中,這將會很慢,而不是在數據庫中完成所有工作。當然,這並不是真正的問題。 (你有沒有考慮過分區?)。 –