1

SQLServer内の詳細テーブルからサマリーテーブルに大量の挿入を実行しています。私は現在、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

アドバイスありがとうございます。

4

1 に答える 1

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) ;
于 2012-06-29T16:33:56.353 に答える