现在有一个比较大的table LData,中间有千万条数据,准备将其中符合一定条件(where *)的数据抄入到另外的一个数据库中的表NData
现在尝试了常用的几种数据复制方法1. insert into NData select * from LData where *
2. a. select * into #temp from LData where *
b. insert into NData select * from #temp
3. exec master..xp_cmdshell 'bcp "select * from LData where *" queryout "c:\temp.dat" ...'
exec master..xp_cmdshell 'bcp Ndata in"c:\temp.dat" ...'大概就是这三种方法,结果竟然是第三种最快,第二种次之,第一种最慢
有点费解,想探讨一下其中背后的原因,以及是否还有更好的方法
现在尝试了常用的几种数据复制方法1. insert into NData select * from LData where *
2. a. select * into #temp from LData where *
b. insert into NData select * from #temp
3. exec master..xp_cmdshell 'bcp "select * from LData where *" queryout "c:\temp.dat" ...'
exec master..xp_cmdshell 'bcp Ndata in"c:\temp.dat" ...'大概就是这三种方法,结果竟然是第三种最快,第二种次之,第一种最慢
有点费解,想探讨一下其中背后的原因,以及是否还有更好的方法
唯一的要求是数据复制要最快完成,不能影响Ldata的运作
bcp属于bulk操作快
1,2两个看一下执行计划吧。应该差不多的。
如果拆分情况三为
1. exec master..xp_cmdshell 'bcp "select * from LData where * " queryout "c:\temp.dat " ... '
exec master..xp_cmdshell 'bcp Ndata in "c:\temp.dat " ... ' 2. a> select * into #temp from LData where *
b> exec master..xp_cmdshell 'bcp "#temp" queryout "c:\temp.dat " ... '
c> exec master..xp_cmdshell 'bcp Ndata in "c:\temp.dat " ... ' 第二中情况更快一些,想知道背后的原因