3

T-SQL ステートメントがあるとします。

select * from MyTable
where Code != 'RandomCode'

私は、この種の where ステートメントをより迅速に実行することを任されています。Books Online によると、正のクエリ (=) は負のクエリ (!= , <>) よりも高速です。

したがって、1 つのオプションは、これを CASE ステートメントにすることです。

select * from MyTable
where 
   case when Code = 'RandomCode' then 0 
      else 1 end = 1

これが元の T-SQL よりも速いか遅いかを知っている人はいますか?

前もって感謝します。

4

1 に答える 1

6

テーブルに関心のある情報と、列の可能な値をより具体的にする必要がありCodeます。次に、適切なインデックスを作成してクエリを高速化できます。

たとえば、Code列の値が 、 、 のいずれかのみである'RandomCode'場合'OtherCode''YetAnotherCode'クエリを次のように書き直すことができます。

SELECT * FROM MyTable WHERE Code = 'OtherCode' OR Code = 'YetAnotherCode'

Codeもちろん、列にはインデックスが必要です。

不等式クエリを実行する必要がある場合は、次SELECT *のようなより狭いクエリに変更できます。

SELECT Id, Name, Whatever FROM MyTable WHERE Code != 'RandomCode'

次に、次のようなインデックスを作成します。

CREATE INDEX idx_Code ON MyTable(Code) INCLUDE (Id,Name,Whatever)

これにより、テーブル スキャンをインデックス スキャンに置き換えることで I/O を削減できます。

于 2012-08-07T04:31:50.663 に答える