プラン キャッシングではなく、データ キャッシングが原因である可能性があります。これには 2 つの方法があります。開発サーバーでは、実行
DROPCLEANBUFFERS
してデータキャッシュをクリアできます。最適化を行うには、クエリ プランと統計情報も使用する必要があります。この場合
SET STATISTICS IO On
、物理読み取りではなく論理読み取りに集中できます。データ キャッシュをクリアした後にクエリを 2 回実行すると、物理読み取りは劇的に低下しますが、論理読み取りは同じままです。
`OPTION RECOMPILE`
プランのキャッシュにのみ影響し、たとえば結果セットのサイズが劇的に変化した場合など、さまざまなパラメーターを渡すためにクエリ プラン自体が変更される状況でのみ違いが生じます。
論理読み取りを減らすには?一般的に言えば、インデックスとカバリングインデックスが思い浮かびます。実行計画を見ると、SQL サーバーが必要と判断した場合、インデックスを提案している可能性があります。実際には、適切なインデックス作成構文が提供されます (ただし、新しいインデックスが常に役立つとは限りません)。また、実際の実行計画で、返された行数が予想される行数と大幅に異なる場合は、統計を確認することをお勧めします。SQL サーバーはインデックス付きの列の統計を維持しますが、自動統計がオンになっていない場合、where ステートメントにインデックスのない列が含まれている場合は、その統計を生成する (またはインデックスを作成するか、自動統計をオンにする) ことができます。