insert tb select ... from table   ---其中table表数据大概50万行,table大概300M ,table和tb表结构相同,但是聚集索引不一样。table是每天生成的数据,我在0点自动用作业导入到tb表。然后清空table表。这样下来tb表月末的数据将达到1400万行。现在的问题是:insert tb select ... from table 一次这样插入的效率高,还是while exists(select * from table)
begin
insert tb select top 100000 from table 
delete table where id in (select top 100000 id from table)
end
那个效率高?

解决方案 »

  1.   

    2个表虽然结构相同,但是
    表 tb 上的聚集索引和 table的聚集索引 不是同一列。
    这样我在insert tb 的时候 是不是消耗掉很多时间排序啊
      

  2.   

    应该是一次性快。2个表虽然结构相同,但是
    表tb上的聚集索引和table的聚集索引不是同一列。 表tb上聚集索引,要设计合理。比如今天插入的数据,如果tb聚集索引导致之前插入的数据重排,月末的时候,效率是灾难性的。
      

  3.   

    路过, 进来搭一下嘴, 如说得不对请指正.像这类的数据插入, insert tb 的速度, 很大程度决定于构建 tb 索引所花的大量时间,tb的索引越多,这种插入所花的时间就越长,像这样的数据 POOL,最好不要做得太庞大, 可以分开存放在规模小一点的表上,再用视图将它们组织在一起.像你这种做法, 我也有做过, 我是用第一种方法的, 第二种方法没有试过, 我是凭直觉觉得应该第一种的快.其实要知道答案也很容易, 马上动手测试一下就知道了. 
      

  4.   

    清空表的时候使用TRUNCATE TABLE TableName,这样第2种方法效率就更高(有的毛病就是数据无法还原,看实际的需要了)。