0

多くの列を持つ2つのテーブルがあり、それらの列には多くの場合nullがあります。

2 つのテーブル データを比較する最良の方法は何ですか?

私は以下の方法を使用しています:

UPADTE TableB
SET Col1 = A.Col1
FROM TableA A INNER JOIN TableB B
ON A.Col2 = B.Col2 AND A.Col3 = B.Col3 .... A.Col47 = B.Col47

どういうわけか私もこれを書くことができますが、ご存知のように、SQL Server は NULL = NULL と言うことができず、すべての列で ISNULL 関数を保持している場合、クエリには 20 ~ 30 分かかります。

同じタスクをより速く正確に行う方法はありますか?

4

1 に答える 1

1

[...]SQL Server は NULL = NULL とは言えず、すべての列で ISNULL 関数を保持していると、クエリに 20 ~ 30 分かかります。

これは完全に真実ではありません。この比較のために、ansi_nulls をオフに設定できる可能性があります。この機能は、SQL Server の将来のバージョンではいず​​れ利用できなくなる可能性がありますが、少なくとも 2012 年までは利用できることに注意してください。

set ansi_nulls on
select 1 where 1 != null    -- returns nothing
select 1 where null = null  -- returns nothing
select 1 where null != null -- returns nothing

set ansi_nulls off
select 1 where 1 != null    -- returns 1
select 1 where null = null  -- returns 1
select 1 where null != null -- returns nothing

これでパフォーマンスの問題が解決しない場合は、インデックス作成またはより優れたハードウェアを調べてクエリをより高速に実行するか、一歩下がって何が起こっているかを再分析してから、ソリューションをリファクタリングすることをお勧めします。一見すると、これは通常とは異なる操作 (非常に類似したテーブル間でデータをコピーするが、すべてのデータが一致する場合のみ) を実行するように思えますが、正確なテーブル定義、要件、および例を提供すると、大いに役立つ可能性があります。何を変えることができるかを他の人が理解できるようにします。

于 2012-10-03T14:03:04.557 に答える