现在有一个比较大的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.   

    可以忽略,在Ndata这边的数据库中只是为了复制数据,所有的其它限制都会放在后续动作中
    唯一的要求是数据复制要最快完成,不能影响Ldata的运作
      

  2.   

    结果很正常
    bcp属于bulk操作快
      

  3.   

    bcp应该是最快的,
    1,2两个看一下执行计划吧。应该差不多的。
      

  4.   

    为什么bcp反而是最快的呢?
    如果拆分情况三为
    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 "   ... ' 第二中情况更快一些,想知道背后的原因