BULK INSERT或导入和导出数据向导?

时间:2014-07-17 03:57:06

标签: sql-server-2008 ssis sql-server-2008-r2 ssms bulkinsert

我有一个大型的每周CSV文件(范围从500MB到1GB,行数超过250万),可以加载到SQL Server 2008 R2数据库中。

我能够使用BULK INSERT命令或导入和导出数据向导来加载数据。就我的数据集而言,它们之间的加载时间跨度没有观察到差异。

就性能而言,您的推荐方法是什么?效率和未来的维护是什么?

提前致谢!

干杯,亚历克斯


我最终使用SQL Server导入和导出数据向导并将其保存到SSIS包。然后我使用Business Intelligence Development Studio编辑保存的包并将其重新导入SQL Server。它运行良好,只需2分钟即可将所有9个CSV文件(从10MB到600 MB)加载到SQL Server数据库。

2 个答案:

答案 0 :(得分:4)

MSDN论坛:

  

当SSIS开发人员选择使用" Fast Load"选项   使用"表锁定"在OLEDB目标上,或使用SQL Server   目的地,然后他/她已经有效地使用了BULK INSERT,所以   这是一个讨论什么更快的问题。

     批量插入本身有一些技巧,在SQL Server竞赛中可以更多   完成以使其更快的行处理,即使其最小化或   根本不记录。现在禁用约束是另一件事bcp   照顾,而不是SSIS(除非指示),这是MSFT可以做到的   决定改变SSIS,但SSIS闪耀的地方是使用   算法确定给定的最佳参数是什么   要使用的机器/系统(例如缓冲区大小等)。

     

因此,在大多数应用程序中,SSIS立即更快,甚至更多   通过适当的调整更快。

     

在现实生活中,许多因素对基准测试产生不同的影响,   但在这个阶段,我倾向于说没有真正可衡量的   差。

Microsoft发布了非常丰富的指南,介绍如何比较不同的加载策略以实现高性能和在批量加载方法之间选择 - The Data Loading Performance Guide

还可以看一下以下文章。

答案 1 :(得分:1)

我会从导入和导出数据向导保存SSIS包,并使用Visual Studio(也称为BIDS又称SSDT BI)调整OLE DB目标设置 - 设置独占表锁和大批量大小和提交大小,例如100000行。通常情况下,这会将性能提升约20%。

SSIS是未来调整的最佳选择,例如过滤或转换数据,禁用和重建索引之前和之前在你装载之后。