-1

次のコードがあります。

select * from View1 where (Timestamp >= @x) and (SomeCode like 'ABC%')

それはひどく遅いです。しかし、コード

select * from View1 where (Timestamp >= @x)      (*)

かなり速く実行されます。またSomeCode like...、フィルターは前の(*)コードでかなり高速に実行されます。したがって、2段階の場合は高速です。(View1CLRで計算されたビューです。)

質問:SQL Server 2008 R2に、クエリ(より正確には、2つのフィルター)を2つのフェーズ、つまり最初にTimestampフィルター、次にフィルターを作成するようにアドバイスする方法SomeCode

:クエリのネストは機能しません。また、処理も遅くなります。

4

1 に答える 1

-2

おそらくもっと良い方法がありますが、これは私にとってはうまくいきます:

SELECT * from (SELECT * FROM View1 WHERE Timestamp >= @x) x
WHERE field_x LIKE 'ABC%'

これにより、高速クエリが最初に実行されます。

コメントへの返信:

「力」は正しい言葉ではないかもしれませんが、私は間違いなくそれが違いを生むのを観察しました。誰かがより良い提案を持っているなら、私はこれを修正します。

あなたのコメントへの返信:

「動作しません」=まだ遅いですか?

その場合:タイムスタンプ列にインデックスが付けられますか?より大きなクエリでSQLServerのリソース(メモリ、ディスク容量)が不足していませんか?実行計画を見ましたか?

本当に問題を強制するとどうなりますか:

SELECT * into #tmp FROM View1 WHERE Timestamp >= @x
SELECT * from #tmp WHERE field_x LIKE 'ABC%'
于 2012-10-22T15:22:22.157 に答える