クエリを実行すると、SQL Server は結果をキャッシュしますか?
理由:以下のクエリを実行すると:
SELECT id
FROM Foo
WHERE Foo.Name LIKE '%bar%'
クエリは 1 回目で 40 秒間実行されます。
しかし、2 回目の実行では数秒しかかかりません。
これは、実行計画が何らかの形でキャッシュされているためですか、それとも実際にはデータがキャッシュされているため、2 回目の実行ではるかに高速に取得できるのでしょうか?
クエリを実行すると、SQL Server は結果をキャッシュしますか?
理由:以下のクエリを実行すると:
SELECT id
FROM Foo
WHERE Foo.Name LIKE '%bar%'
クエリは 1 回目で 40 秒間実行されます。
しかし、2 回目の実行では数秒しかかかりません。
これは、実行計画が何らかの形でキャッシュされているためですか、それとも実際にはデータがキャッシュされているため、2 回目の実行ではるかに高速に取得できるのでしょうか?
SQL Server はクエリ結果をキャッシュしませんが、読み取ったデータ ページをメモリにキャッシュします。これらのページのデータは、クエリ結果を生成するために使用されます。
設定により、データがメモリから読み取られたのかディスクから読み取られたのかを簡単に確認できます
SET STATISTICS IO ON
クエリの実行に関する次の情報を返します
Table 'ProductCostHistory'. Scan count 1, logical reads 5, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
論理読み取りと物理読み取りの違いは、メモリから読み取られるデータです。
SQL Server は、最大値 (構成された、または物理的な最大値) に達するまでキャッシュ用のメモリも要求し、その後、使用頻度の最も低いページがフラッシュされます。