2016-05-17 6 views
0

私は何百万ものデータ行を持つクエリで*を削除しました。SQLクエリで削除された出力を使用することのメリット

これを使用することのメリットはありますか?

私のクエリは次のとおりです。

DELETE from Table1 
    OUTPUT deleted.* INTO Table2 
    FROM Table4 MH 
    inner join Table3 M 
    on MH.id = M.Mid 
    where condition 

それは完全に正常に動作します。しかし、これはテーブル全体をロックしていますか? それは良いアプローチですか?

答えて

0

削除された行を別のテーブルに書き込む必要があり、削除ステートメントの実行時間が増加する可能性があります。しかし、出力句と削除句で削除されたロックは同じでなければなりません(潜在的に異なる持続時間)。プロダクション以外の環境で、拡張イベントセッションで自分自身を確認してください!

+0

だから、テーブルを選択して他のテーブルに移動しても、テーブル全体がロックされると言っていますか?または、選択している行全体をロックしますか? –

+0

それは私が言ったことではない。私は、2つのシナリオ間のロックは同じであると言いました。したがって、非出力バージョンが行とページロックを取る場合、出力バージョンも同様です。 –

関連する問題