我在表中插入了数百万条记录,这样的操作将需要数小时甚至一天的时间。 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 = ...',或者选择所有的记录,循环它们,然后决定哪个表格可以逐一插入每条记录?在什么环境/语言中 - 听起来你可能把整个表格通过网络拉回到你的电脑,然后将它推回到四个新表格中,这将会很慢,而不是在数据库中完成所有工作。当然,这并不是真正的问题。 (你有没有考虑过分区?)。 –