SQL Server CACHES查询结果?

pen*_*ake 18 sql t-sql sql-server caching sql-server-2008-r2

当我运行查询时,SQL Server会缓存结果吗?

因为:当我运行以下查询时:

SELECT id
FROM Foo
WHERE Foo.Name LIKE '%bar%'
Run Code Online (Sandbox Code Playgroud)

查询第一次运行40秒.

但在第二次运行时只需几秒钟.

这是因为执行计划是以某种方式缓存的,或者实际上数据是否被缓存,以便我可以在第二次运行时更快地检索它?

Fil*_*Vos 24

SQL Server不会缓存查询结果,但会缓存它在内存中读取的数据页.然后使用来自这些页面的数据来产生查询结果.

您可以通过设置轻松查看数据是从内存还是从磁盘读取

SET STATISTICS IO ON
Run Code Online (Sandbox Code Playgroud)

返回有关查询执行的以下信息

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.
Run Code Online (Sandbox Code Playgroud)

逻辑读取和物理读取之间的区别是从内存中读取的数据.

SQL Server还将声明内存用于缓存,直到达到最大(配置或物理最大值),然后刷新最旧的页面.