web-dev-qa-db-ja.com

ISNULL()OR UPDATEステートメントではNULLです

500kレコードのライブオンラインデータベースでUPDATEステートメントを実行する必要があります。どのステートメントがより速く実行されるのか知りたい:

Update Table set REC_ID = isnull(REC_ID,'')

Update Table set REC_ID = '' where REC_ID is null

microsoft SQL Server 2012を使用しています

1
Ashish Patidar

これらのクエリは同じことを行いません。

Update Table set REC_ID = isnull(REC_ID,'')

これは各レコードを更新し、REC_IDNULLの場合は''に設定します。

Update Table set REC_ID = '' where REC_ID is NULL

これは、REC_IDにnull値を含むレコードのみを更新し、''に設定します。
どちらも結果は同じになりますが、2番目のレコードは少ないレコードで実行されます(すべてのREC_IDNULLである場合を除く)、より高速になるはずです。

5
DeadlyJesus

上記の2つの場合の唯一の違いは、最初のステートメントにwhere句がないため、REC_IDがNULLであるかどうかに関係なく、テーブルのすべての行が更新されます。 2番目のケースでは、REC_ID is nullの行のみが更新されます。

次のような状況では、パフォーマンスが影響を受けます。

Update Table set REC_ID = '' where isnull(REC_ID,'') ='' 

上記の場合、述語はsearch argumentではなくなったためです。これは、SQLサーバーがREC_ID列のインデックスを効率的に使用できないことを意味します。

0
Deepshikha