根据INSERT是否已存在执行INSERT最有效的方法是什么?

时间:2012-06-29 16:27:50

标签: sql-server-2008 tsql

我正在从详细信息表中执行大量插入到SQL Server中的摘要表中。我目前正在使用LEFT OUTER JOIN来确定详细信息表中的行是否已经在插入之前存在于摘要表中,如下例所示:

INSERT INTO TableA
       (columnA
       ,columnB
       ,columnC)
SELECT 
    b.columnA, 
    b.columnB, 
    b.columnC
FROM TableB b
    LEFT OUTER JOIN TableA a
        on a.columnA = b.columnA
WHERE
    a.columnA IS NULL 

我发现即使没有要插入的行,此方法也需要相当长的时间,因为它必须比较所有行以确定已存在的行。在这种情况下,我通常会考虑向TableB添加一个标志来说明已插入的行。

但是TableB中要插入TableA行的行有几种不同的情况需要多个标记,我宁愿不使用存储空间,因为TableB是非常的大而且越来越大。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:3)

INSERT INTO TableA (columnA, columnB, columnC)
SELECT 
    b.columnA, 
    b.columnB, 
    b.columnC
FROM TableB as b
where not exists (select 1 from TableA as xx where xx.columnA = b.columnA) ;