7

T-SQLでは何が速いのですか?

DELETE * FROM ... WHERE A IN (x,y,z)

または

DELETE * FROM ... WHERE A = x OR A = y OR A = z

私の場合、x、y、zはストアドプロシージャの入力パラメータです。そして、DELETEステートメントとINSERTステートメントのパフォーマンスを最大限に発揮させようとしています。

4

9 に答える 9

14

考えないでください。プロフィール。

スピードの問題を考えるときは、あなたの直感や他の誰かの直感に頼らないことを強くお勧めします。代わりに、何らかのプロファイリング/実行時間測定を使用して両方のオプションを試し、状況に応じてどちらが速いかを見つけてください。

于 2009-07-13T14:37:04.577 に答える
12

「IN」は一連の「OR」に変換されます...「IN」を含むクエリの実行計画を見ると、それが展開されていることがわかります。

私の意見では、「IN」を使用する方がはるかにクリーンです。特に大きなクエリでは、はるかに読みやすくなります。

于 2009-07-13T14:36:55.717 に答える
4

テスト サーバーで2 つのストアド プロシージャを記述します。1 つは を使用しIN、もう1 つは を使用します。OR各手順を 10,000 回 (または 1,000,000 回など) 実行し、タイミングを比較します。

一般に、これはどちらのアプローチが速いかという質問に対する適切な答えを得る「唯一の」方法です。単純なタイミング テスト ケースを記述し、何度も何度も実行します。

于 2009-07-13T14:37:29.320 に答える
3

ではSQL Server、オプティマイザはこれらのクエリに対して同一のプランを生成します。

于 2009-07-13T14:38:05.043 に答える
2

彼らは私の経験から同じ正確な計画を生成する必要があります

計画を見てみましょう

于 2009-07-13T14:38:51.657 に答える
1

Aが計算の場合、 を使用して 1 回、 を使用INして N 回実行されORます。

于 2009-07-13T14:36:55.123 に答える
1

A が計算または列であるかどうかに関係なく、SQL Server 2005 は IN を OR 句に変換するように見えます。

于 2009-07-13T14:42:08.593 に答える
1

SQL Server で最も高速なのは、INNER JOIN で DELETE を使用することです。値が 3 つの場合は違いに気づきませんが、より多くの値を使用すると (数千を実行しています)、その違いは驚異的です。値を一時テーブルに隠してから、それに参加できます。

例えば

DELETE C
FROM Customer AS C INNER JOIN #ValuesToDelete AS D ON C.CustID = D.CustID

オプションの where 句を追加することもできます。

于 2009-07-13T15:17:53.963 に答える
0

正確に等しくなければなりません。RDMBSのほとんどはに変換INされORsます。

もちろん、INstoORsからの翻訳に時間がかかると考えると、withの文のORs方が速くなります;-)

更新:私はそれAがコラムだと考えています。

于 2009-07-13T14:34:58.263 に答える