当我运行查询时,SQL Server是否会缓存结果?
由于: 当我运行以下查询时:
SELECT id
FROM Foo
WHERE Foo.Name LIKE '%bar%'
查询第一次运行 40秒。
但在第二次运行时,只需几秒。
这是因为执行计划是以某种方式缓存还是实际缓存了数据,以便我可以在第二次运行时更快地检索它?
答案 0 :(得分:23)
SQL Server不会缓存查询结果,但会缓存它在内存中读取的data pages。然后使用来自这些页面的数据来产生查询结果。
您可以通过设置
轻松查看数据是从内存还是从磁盘读取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还会声明内存用于缓存,直到达到最大(配置或物理最大值),然后刷新最旧的页面。