2

選択カウントを実行して、削除を呼び出す前に結果が0より大きいかどうかを確認する方がよいかどうか、またはデータベースで削除ステートメントを盲目的に起動する方がよいかどうかについてのベストプラクティス/考えを探しています。データは存在しません。私たちの場合、ほとんどの場合、データは存在しません。

だから何が良いですか:

Option 1: call Select Count(X) where foo, if result > 0, delete where foo

また

Option 2: delete where foo

私はスピードの理由でブラインド削除に傾いています、そしてあなたはとにかくテーブルヒットをしているので。

編集:これは実際にはケトル(ETLツール)で発生しているため、削除がある場合は3つの操作が完全に別々に実行されます。したがって、完全にSQLを使用することはできません。

4

4 に答える 4

4

削除するだけです。そこにないものを削除しようとすると、0(ゼロ)行が削除されます。これにより、DBへのトリップ数も削減されます。

于 2010-07-20T17:30:18.493 に答える
4

やみくもに削除してから、影響を受けた行数を取り戻すと思います。どちらの場合も、比較が行われ、実行時間はほぼ同じになります。

于 2010-07-20T17:30:19.530 に答える
2

削除するだけです。事前にcount(*)を発行してもメリットはありません。

于 2010-07-20T17:29:05.033 に答える
0

普遍的なITの答えは、「それは依存する」で始まります

ここでは、削除のクエリプランによって異なります。

インデックスまたはより適切なクエリプランを使用するEXISTSクエリ(OMG-Poniesごと)を実行する場合は、より高速になります。

その場合、テーブルスキャンを使用する不要な削除を回避できる可能性があります。

于 2010-07-20T18:04:09.993 に答える