質問

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、私の能力なのです。

役に立ちましたか?

解決

あなたは「IN」と、クエリの実行プランを見れば、

「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 INORs.

もちろん、一度中をご覧頂ければその翻訳から INsORs 高い時間を掛けているので、文 ORs より速やか;-)

更新: いることを考慮し A するものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top