何よりも速やですか?
-
12-09-2019 - |
質問
T-SQLうが早い?
DELETE * FROM ... WHERE A IN (x,y,z)
または
DELETE * FROM ... WHERE A = x OR A = y OR A = z
私の場合、x、y及びzは、入力パラメータを格納す。今ることができるように性能の削除およびINSERT、私の能力なのです。
解決
「OR」Sシリーズに変換されます「の」...、あなたはそれはそれを拡大してきました表示されます。
それははるかに読みやすくなり、特に大きなクエリでは、私の意見では「IN」を使用して多くのクリーナーます。
他のヒント
を考えてはいけません。プロファイル。の
スピードの問題を検討する際に、私はあなたの直感に頼ることないよう強くお勧めし、あなたのか、他人の。代わりに、いくつかのプロファイリングの種類/実行時間測定で、両方のオプションを試してみてください、そして、が速く、あなたの状況であるのかを調べる。
テストサーバーに、2つのストアドプロシージャ、IN
を用いたもの、他の使用OR
を書きます。各手順万(または1,000,000、または何でも)回を実行し、タイミングを比較します。
一般的に、これはかなりのアプローチが速くなるの質問に良い答えを持っている「唯一」の方法です:。、何回も簡単なタイミングテストケースを書き、多くのそれらを実行
SQL Server
では、オプティマイザは、これらのクエリのために、同一の計画を生成します。
彼らは私の経験から、同じ正確な計画を生成する必要があります。
の計画を見てみましょう。
A
が計算である場合、は、IN
を用いOR
とN回用いて一度実行される。
にかかわらず、Aは、計算または列であるかどうかの、2005年にOR句で変換SQL Serverのように見えます。
SQL Serverの下に絶対最速JOINはINNERでDELETEを使用することです。三つの値を使用すると、文句を言わない違いに気付くことが、より多くの値(私たちは数千を行っている)との違いは驚異的です。あなたはその上に参加し、その後temporayテーブルに自分の価値観を隠しておくことができます。
例えばます。
DELETE C
FROM Customer AS C INNER JOIN #ValuesToDelete AS D ON C.CustID = D.CustID
また、オプションのwhere句を追加することができます。
この書式を遵守して作成すること等しい.最RDMBS transalte IN
へ ORs
.
もちろん、一度中をご覧頂ければその翻訳から INs
へ ORs
高い時間を掛けているので、文 ORs
より速やか;-)
更新: いることを考慮し A
するものです。