私はSQL Server 2008-R2を使用していますが、より一般的な回答にも興味があります...
何億行ものテーブルがあり、それぞれに「DateModified」フィールドがあります (datetime2(7))
今、私は非常に頻繁にそのテーブルを次のようなクエリでポーリングします
select * from table where DateModified > @P1
ここで、パラメーターは常に最新 (過去数分以内など) であり、その値に一致するレコードはおそらく少数です。
これらの値の多くにインデックスを使用することは決してないのに、テーブル全体に大きなインデックスを維持していることに気づきました...したがって、これは、フィルター処理されたインデックスの完全な使用のように聞こえます。に対してクエリを実行する可能性があります...
しかし、この場合、フィルターはどのように見えるでしょうか? 私の唯一のアイデアは、フィルターをかけることでした
where DateModified > [yesterday]
where[yesterday]
は日付リテラルですが、フィルターを定期的に再定義する必要があります。そうしないと、フィルターの利点が時間の経過とともに減少します。
気まぐれに試しModifiedDate > DATEADD(d,-1,GETDATE())
てみましたが、説明のつかないエラーが発生しました...どうすればそれが可能になるのかわかりませんでした。
これを達成する他の方法はありますか?
最後に、これを行う方法がある場合、私の状況では統計が大幅に間違っていると予想する必要がありますか?それはクエリのパフォーマンスに影響しますか?
統計に関する私の懸念は、この記事から来ています。
切断されたデータを使用して、あるシステムから別のシステムに変更を伝達しようとしています...「DateModified」をポーリングするための完全に別のアプローチを提案したい場合は、喜んで検討します。