1

私の列の 1 つは、4 つの可能な値 ( val1val2val3)のみを含むことができますval4

WHEREこれらの 4 つの値 (つまり ) の 1 つを除外するには、句に追加のフィルターを追加する必要がありますval4

使用するのが速くなるでしょうかNOT IN ('val4')、それともIN ('val1','val2','val3')

4

2 に答える 2

4

NOT IN ('val4')基本的に同等です

WHERE
    NOT (column = 'val4') /* or column <> 'val4' */

一方、IN ('val1', 'val2', 'val3')基本的には

WHERE
(
   column = 'val1'
   OR
   column = 'val2'
   OR 
   column = 'val3'
)

最初のオプションが無視できるほど高速であることを願っています。SQL エンジンは、関数で指定する値の数と、テーブルで使用できるインデックスにIN応じて、異なる最適化を行う場合があります。IN使用する方法に疑問を呈している、どのような動作が見られますか?

于 2013-07-11T22:05:14.560 に答える
1

クエリ プランを確認します。Val4 がクラスター化されていないインデックスの場合、両方のプランがインデックス シークであるに違いありません。
=、および <> でテストしましたが、すべて同じクエリ プランでした。
それらが同じクエリプランを持っている場合、実際のパフォーマンスの違いが十分に大きいとは思えません。しかし、私はまだ単一の値を使用します。

少数の値しかないため、インデックス付きビューがおそらく最高のパフォーマンスを発揮します。

于 2013-07-11T22:12:02.250 に答える