500kレコードのライブオンラインデータベースでUPDATE
ステートメントを実行する必要があります。どのステートメントがより速く実行されるのか知りたい:
Update Table set REC_ID = isnull(REC_ID,'')
Update Table set REC_ID = '' where REC_ID is null
microsoft SQL Server 2012を使用しています
これらのクエリは同じことを行いません。
Update Table set REC_ID = isnull(REC_ID,'')
これは各レコードを更新し、REC_ID
がNULL
の場合は''
に設定します。
Update Table set REC_ID = '' where REC_ID is NULL
これは、REC_ID
にnull値を含むレコードのみを更新し、''
に設定します。
どちらも結果は同じになりますが、2番目のレコードは少ないレコードで実行されます(すべてのREC_ID
がNULL
である場合を除く)、より高速になるはずです。
上記の2つの場合の唯一の違いは、最初のステートメントにwhere
句がないため、REC_IDがNULL
であるかどうかに関係なく、テーブルのすべての行が更新されます。 2番目のケースでは、REC_ID is null
の行のみが更新されます。
次のような状況では、パフォーマンスが影響を受けます。
Update Table set REC_ID = '' where isnull(REC_ID,'') =''
上記の場合、述語はsearch argument
ではなくなったためです。これは、SQLサーバーがREC_ID
列のインデックスを効率的に使用できないことを意味します。