BULK INSERT还是导入导出数据向导?

3
我有一个每周的大型CSV文件(范围从500MB到1GB,包含超过250万行),要加载到SQL Server 2008 R2数据库中。
我可以使用BULK INSERT命令或导入和导出数据向导来加载数据。就我的数据集而言,它们在加载时间跨度方面没有任何差异。
就性能、效率和未来维护方面而言,您推荐的方法是什么?
提前感谢!
谢谢,Alex
最终我选择使用SQL Server导入和导出数据向导,并将其保存为SSIS包。然后,我使用商业智能开发工具编辑了保存的包,并重新导入到SQL Server中。这很有效率,只需要2分钟的时间将9个大小在10MB到600MB之间的CSV文件加载到SQL Server数据库中。
2个回答

5

MSDN论坛:

当SSIS开发人员选择在OLEDB目标上使用“快速加载”选项以及“表锁定”,或者使用SQL Server目标时,他/她已经有效地使用了非常大量的插入,因此争论什么更快是一个无意义的问题。

单独的大容量插入技巧很多,在SQL Server的比赛中可以做更多的工作,使它变成最小化或不需要记录。现在,禁用约束条件是bcp要处理的另一件事情,而不是SSIS(除非被指示)。这就是微软可以决定在SSIS中更改的内容,但SSIS的优点在于使用算法来确定对于给定的机器/系统使用什么最佳参数(例如缓冲区大小等)。

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

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

微软发布了一份非常有信息量的指南,介绍了比较不同的负载策略以实现高性能和选择大容量加载方法之间的差��� - 数据加载性能指南

同时也看一下以下文章。


1
我会从“导入和导出数据向导”中保存SSIS包,并使用Visual Studio(也称为BIDS或SSDT BI)调整OLE DB Destination设置——设置独占表锁和较大的批量大小和提交大小,例如100000行。通常这样可以将性能提升约20%。
SSIS是未来优化的最佳选择,例如过滤或转换数据,在加载前后禁用并重建索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接