Bulk Insert & BCP执行效率对比

我们以BCP导出的CSV数据文件,分别使用Bulk insert与BCP导入数据库,对比两种方法执行效率

备注:导入目标表创建了分区聚集索引

1.BCP导出csv数据文件

数据量:15000000行,21.7G

导出作业形式:局域网服务器向客户端导出

执行导出:

bcp [spc].[dbo].[bcc] out "c:datacc.csv" -c -t"," -r" " -S"43.xxx.xxx.xxx" -U"sa" -P"*******"

历时:16:10~18:26

2.BCP导入csv

      数据量:15000000行,21.7G

      导入作业形式:局域网客户端向服务器

执行导入:

bcp [spc].[dbo].[bcc2] in "c:datacc.csv" -c -t"," -r" " -S"43.xxx.xxx.xxx" -U"sa" -P"*******"

历时:09:41~19:44,10个小时,未执行完成中止

3.Bulk Insert导入csv

      数据量:15000000行,21.7G

      导入作业形式:csv文件拷贝到服务器,直接在服务器端作业

执行导入

bulk insert bcc3
from 'd:\dbcc.csv'
with(
  fieldterminator=',',
  rowterminator=' ',

     datafiletype='char'

)

历时:17:42~19:44,02:02:00(未执行完)

总结:

1. 由于最初计划在局域网下,采用同样客户端向服务器端导数据,以测试两种方法效率高下;

但使用bcp作业一半时,已经是4+个小时,太慢,所以中途决定将Bulk Insert直接在服务器上作业;

以上测试结果,若不考虑网络因素,Bulk Insert效率更高;

 

2.导入过程,索引必然是影响效率的重要原因 ;

  后面有时间,再使用BCP直接在服务器上作业测试下实际效率,以及删除索引对比两种方式时间

 

--2017-02-20 bulk insert 执行记录

     dbo.aTest 43万行,历时28s

BULK INSERT dbo.aTest
from 'c:\v_atresults'
with(
rowterminator=' ',
fieldterminator=','
)

原文地址:https://www.cnblogs.com/jeffry/p/5622568.html