web-dev-qa-db-ja.com

2つのテーブル間のデータの違いを見つけるSQL最速の方法

2つのテーブルの違いを見つけるための最速の方法を見つけようとしています。最初のテーブルはテキストファイルから毎日読み込まれ、2番目のテーブルはデータベースで維持されます。新規またはテキストファイルから変更されたデータを追加する必要があります。比較は主キーで行われます。

create table dbo.CustomerTransaction
(
    CustomerTransactionId int primary key,
    CustomerName varchar(50),
    ProductName varchar(50),
    QuantityBought int
)

したがって、行の値Table 1:(1、 'Bob'、 'Table'、8)はTable 2と同じです:(1、 'Bob'、 'Table'、8)

これらは異なります(1、 'Bob'、 'Table'、8)、(1、 'Bob'、 'C​​hair'、8)、主キーでは異なります。

Left Join、Except、tablediff、Visual Studio DataComparison、Unionグループなど、メソッドについて説明する記事がたくさんあります。

ただし、パフォーマンス/速度については誰も話しません。最速の内部アルゴリズムの方法はどれですか?それは、この目的のために特別に設計されたSQLツールであるTableDiffユーティリティだと思います。

従来のテキストファイルシステムではCDCにアクセスできないため、毎日すべての新しいデータをSQL Serverに抽出し、以前のデータと比較しています。増分負荷値を見つけて、Kimball Data Warehouseに配置しています。

比較を行っている時点では、どちらのテーブルも積極的に使用されていません。

2つのSQLテーブルの内容の違いを見つけて同期SQLを作成する方法https://stackoverflow.com/questions/4602083/sql-compare-data-from-two-tables

1
user162241

確かな答えはありません。 David Lozinskiは以下の調査を実施し、行数、統計、カーディナリティに応じて異なる方法が成功することを発見しました。

まだ存在していない場合に新しいレコードを挿入する最速の方法

Tablediffユーティリティをテストする機会がありました。何らかの理由で、以下のT-SQLメソッドに比べてパフォーマンスが大幅に低下しました(2〜3倍遅い)。ただし、クロスサーバーテーブルの違いを実行するのに適しています(元はレプリケーションメソッドで使用されていました)。

enter image description here

1
user162241