作为新流程要求的一部分,我们将创建表格,其中包含大约3000 - 4000条记录。我们在txt文件上以纯文本形式提供这些记录的副本。
在表格中加载这些记录给我留下了两个选择
使用shell脚本生成包含这些记录的INSERT语句的SQL文件
使用SQL Loader。
在占用数据库资源方面,以上两个选项中的哪一个最有效率,在要执行此操作的客户端服务器上的利用率。
我确实知道记录的数量相当少,但我们可能不得不用更多的记录(接近60,000)重复此活动,在这种情况下,我希望从一开始就配置最好的选项。
答案 0 :(得分:4)
SQL*Loader
是更有效的方法。它为您提供更多控制。您可以选择执行DIRECT
加载和NOLOGGING
,这将减少重做日志的生成,并且当禁用索引时(作为直接加载的一部分),加载会更快。缺点是,如果负载中断,则索引保留为unusable
。
但是,考虑到优势,SQL*Loader
是最好的方法。当你拥有数百万条记录并且并行运行如此多的加载作业时,你会感受到不同之处。我听到DBA抱怨日志大小,当我们进行CONVENTIONAL INSERT
语句加载时,有200多个此类作业并行运行。数据量越大,您在性能上看到的差异就越大。
答案 1 :(得分:2)
SQL * Loader比数千个单独的INSERT
语句更有效。但即使有60,000行,这两种方法都应该在几秒钟内完成。
答案 2 :(得分:2)
在您提到的两个选项中,SQL * Loader绝对是最佳选择 - 更快,更高效。
但是,我会选择另一种方法 - external tables。拥有SQL * Loader的所有好处,并允许您将外部csv文件视为普通数据库表。