私はGUIDだけを持つテーブルTBL1
を持っています。どちらが速く/より良いですか?
私は別のテーブルTBL2
を持っていますが、主キーはGUIDであり、他のいくつかの列もあります。 GUIDがTBL1
であるかどうかに基づいて、TBL2
の列の1つを更新したいとします。
これより高速で信頼性の高いクエリはどれですか?
MERGE INTO [db].[dbo].[TBL1] AS target
USING [db].[dbo].[TBL2] as source
ON target.GUID = source.GUID
WHEN MATCHED THEN
UPDATE SET
StatusColumn = 0;
または
UPDATE [db].[dbo].[TBL1]
SET StatusColumn=0
WHERE GUID IN (SELECT GUID FROM [db].[dbo].[TBL2])
または多分何か他のもの?
あなたはそれを試して何が起こったのですか?両方のステートメントの実行計画は何を表していますか? –
*一般的には、 'WHERE IN 'はお勧めしません。 「存在する場所」はより一般的に受け入れられます。しかし、神は砂漠を脇に置いています。「MERGE」は、より多くの*高速*ではありません。しかし、なぜ誰かが言葉を取る、あなた自身のすべてのオプションをテストしてみませんか? * [また、GUIDを主キーとして使用することはしばしば推奨されないことに注意してください。あなたのPKがあなたのクラスタ化されたキーである場合、テーブルはボディなしビジネスのようにフラグメント化されます - GUIDは順番に生成されないので、新しいエントリはテーブル内のランダムな位置に挿入する必要があります。* – MatBailie
@Dems - いいアドバイス。私は主キーのためにGuidsを使用している場合は、クラスタ化されていないものに作成(または変更)するだけです。私たちは、その変化を生み出すことによって、私たちの環境が大幅に向上することに気付きました。 – RQDQ