2017-01-18 8 views
0

1つのテーブルから別のテーブルに1つの「セッション」のデータを挿入します。これを行う前に、[Unique ID]列を使用して、この同じセッションに関する既存のデータをすべて削除したいと考えています。TSQLのパフォーマンス - 削除するデータをチェックするか、削除するだけですか?

私の質問は次のとおりです。

は、データが&が存在するなら、私は確認することが、より効率的ですそのようにようにそれを削除します。

if (exists (select top 1 * from dbo.destinationTable where [Unique ID] = @unique_id)) 
begin; 
    delete from dbo.destinationTable where [Unique ID] = @unique_id; 
end; 

それとも単にチェックせずにDELETEステートメントを実行することをお勧めします最初に:

+3

削除するものがない場合、削除が失敗しないので、なぜチェックしますか? – Will

+0

この場合EXISTSを持つ必要はありません。 – FLICKER

+0

'DELETE'だけを使用している場合は、[' @@ RowCount'](https://msdn.microsoft.com/en-us/library/ms187316.aspx?f=255&MSPPError=-2147217396)をチェックしてすべての行が削除されました。または、削除された行を知る必要がある場合は、['OUTPUT'](https://msdn.microsoft.com/en-us/library/ms177564.aspx)句を追加します。 SQL Serverを使用していると仮定します。ヒント:適切なソフトウェア(MySQL、Oracle、DB2など)とバージョンの両方でデータベースの質問にタグを付けると便利です。 'sql-server-2014'です。構文と機能の相違は、しばしば答えに影響します。 – HABO

答えて

1

答えがより効率的であるということは、データベース内のデータ、データベース設計、予想される結果クエリよりも時間がかかります。たとえば、削除するテーブルに子テーブルがなく、ほとんどすべての時間削除するレコードがあると予想される場合は、存在を確認することが無駄になります。一方、削除するレコードがないことが多い場合や、カスケード削除で多くの子レコードが削除される可能性がある場合は、まず存在を確認することが理にかなっています。

+0

迅速な対応をありがとう。私のデータには、カスケード削除と同じような複雑なものは必要ありませんので、今のところ削除ステートメントに留意してください。 – Umibozu

関連する問題