2011-01-06 10 views
1

私は200万行程度のデータを持ち、人為的PKを持つ各行と2つのIdフィールド(つまり:PK、ID1、ID2)を持っています。私はID1 + ID2にユニークな制約(およびインデックス)を持っています。SQL Server 2008で「セット」を維持する最も効率的な方法は?

私は2種類のアップデートを取得していますが、いずれもアップデートごとにID1が異なります。

  1. 100-1000すべての新しいデータの行(ID1が新しい)
  2. 100-1000大部分の行が、必ずしも完全に重複データ(ID1がすでに存在している、多分新しいID1 + ID2対)

この「設定」を維持する最も効率的な方法は何ですか?私はそれらを見るようにここではオプションです:

  1. がID1ですべての行を削除し、新しいデータID1 + ID2のセットからすべての新しい行(む)
  2. クエリのすべての既存の行を挿入し、挿入のみ新しい行
  3. すべての新しい行を挿入し、ユニーク制約違反

任意の考えをトリガー挿入を無視?

+0

を? –

答えて

1

リストされたソリューションのすべてが機能的に同等であるわけではありません。したがって、あなたが何を望んでいるのか、達成する必要があるのか​​についての知識がなくても、どちらが最も適切かは分かりません。

  1. あなたが保存しておきたいデータが失われることがあります。
  2. 上記の表スキーマに基づいて、これは妥当であるはずです。
  3. これは、各INSERTを個別に実行する場合にのみ機能します。

私は利用可能な情報に基づいて[2]を提案します。

+0

ええ、トレードオフがあります。確かに - 基本的にすべてが容認されています。私はこの仕事を少しでもやり遂げるのにかかるコストを最小限に抑えようとしています。ありがとう! –

3

は、SQL Server 2008(または2008 R2)を使用している場合、あなたは、MERGEで何か見ることができます:SQL Serverのバージョン

MERGE INTO MyTable mt 
USING NewRows nr 
    ON mt.ID1 = nr.ID1 and mt.ID2 = nr.ID2 
WHEN NOT MATCHED THEN 
    INSERT (ID1,ID2,<more columns>) VALUES (nr.ID1,nr.ID2,<other columns>); 
+0

驚くべきことに、私がストアドプロシージャを使用すると、それを調べます。 –

+1

このコードを使用するにはストアドプロシージャが必要ありません。 – HLGEM

関連する問題