web-dev-qa-db-ja.com

SQL Serverはクエリ結果をキャッシュしますか?

クエリを実行すると、SQL Serverは結果をキャッシュしますか?

理由:以下のクエリを実行すると:

SELECT id
FROM Foo
WHERE Foo.Name LIKE '%bar%'

クエリは40秒(初回)の間実行されます。

しかし2回目の実行にはほんの数秒かかります。

これは実行プランが何らかの形でキャッシュされているか、実際にデータがキャッシュされているため、2回目の実行でデータをより速く取得できますか?

22
pencilCake

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は、最大(構成済み、または物理的な最大)に到達し、最も古いページがフラッシュされるまで、キャッシュ用のメモリも要求します。

27
Filip De Vos