检查数据是否已存在并插入的更好方法

时间:2011-08-22 08:49:04

标签: sql sql-server sql-server-2008 ssis

大家好我拥有以下SQL Server 2008脚本,它将检查Table A中是否已存在某行,以及是否未插入来自Table B的数据。

这很好用,直到Table A开始填满大量数据。我们目前在这个表中有3000万行,并且这将继续增长到预测的7000万行。

如果这需要太长时间并影响其他进程,则会出现问题。只是想知道是否有更好的方法来检查表中是否已存在行。只是添加这些都是使用SSIS完成的。

脚本:

INSERT INTO TABLE A ([recordID],Field 1, Field2, Field 3, Field 4, Field 5) 
    SELECT 
        [TABLE B].[recordID],[TABLE B].[Field 1], [TABLE B].[Field2], 
        [TABLE B].[Field 3], [TABLE B].[Field 4], [TABLE B].[Field 5] 
    FROM TABLE B AS TABLE B 
    LEFT OUTER JOIN TABLE A AS TABLE A ON [TABLE B].[recordID] = [TABLE A].[recordID] 
    WHERE [TABLE A].[recordID] IS NULL

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

不确定这是否会更快,但值得一试:

INSERT INTO TABLE A ([recordID],Field 1, Field2, Field 3, Field 4, Field 5)

SELECT [TABLE B].[recordID],[TABLE B].[Field 1], [TABLE B].[Field2], [TABLE B].[Field 3], [TABLE B].[Field 4], [TABLE B].[Field 5] 
FROM TABLE B 
where b.recordID not in 
     (select recordID from A)

答案 2 :(得分:0)

  1. 如果它是聚集索引,并且新添加的RecordId不是增量的,那么预计会发生大量页面溢出。确保设置最佳填充系数。
  2. 找出什么操作需要时间,然后解决起来很简单。如果搜索花费时间或插入需要时间?