web-dev-qa-db-ja.com

より高速なCASEステートメント: "WHEN [field] in(0)"または "WHEN [field] = 0"?

私は別の人が書いたストアドプロシージャを見ていて、すべてのWHEN句が=ではなくINステートメントを使用しています。私の直感は、これは速く、効率的ではない、などと私に言っています。

例えば:

CASE WHEN a.Indicator in ('Yes') then 'something'
     WHEN a.STATUS in (0) then 'something 0'
     WHEN a.STATUS in (1) then 'something 1'
     WHEN a.STATUS in (2) then 'something 2'
     WHEN a.STATUS in (3,4,5,6,7,8) then 'something big'
END

=の代わりにINを使用する方が速いですか?

6
Erik

次の構成:

_c IN (x, y, z)
_

以下に外挿されます:

_c = x OR c = y OR c = z
_

論理的には、c IN (x)が_c = x_に外挿することになります。したがって、最初のコメントは完全に正しいです。エッジの場合(クエリテキストのサイズが実際に選択によって十分に影響を受ける)を除いて、パフォーマンスの違いはわかりませんが、パフォーマンスの違いを理解することは困難です。言及する価値がある。

11
Aaron Bertrand