数百万行のテーブルがあり、そこからクエリを時々実行する必要があります。通常、最初のクエリは非常に遅くなり(約10秒)、その後のクエリは通常、かなり高速になります(約1秒)。数時間後、遅い/その後速いサイクルが再び始まります。
必要なすべてのインデックスが存在し、適切に使用されていることを実行プランで確認しました。パフォーマンスの違いは、インデックスが後続のクエリのために実際にメモリ内にあるためであると思います(私は正しいですか、それとも他にもあります)考えられる原因?)
また、インデックスを使用して他の多くのクエリも実行していますが、これらのクエリは時間がかかりませんし、そのパフォーマンスはそれほど重要ではないため、これらのインデックスが実際に重要なインデックスをメモリキャッシュから押し出しているのではないかと心配しています。
「RAMを追加する」という明らかな修正とは別に、インデックスをメモリに強制的に戻すためにダミークエリを1時間ごとに実行するスクリプトを作成することを考えていました。
これを行うよりエレガントな方法はありますか?SQLServerに、1つの単一のインデックスをキャッシュするだけの十分なメモリがある場合、それをキャッシュする必要があることを示唆する方法と同様に、
私は通常、そのようなことに関してSQLServerを台無しにするのが最善ではないことを知っていますが、私のクエリの異常な性質(非常にまれに実行されますが、タイムクリティカル)は、それが理にかなっていると信じています(可能な場合) 。
また、特定の時点でどのインデックスがメモリにキャッシュされているかを知る方法があるかどうか知りたいです。