29

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

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

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

查询第一次运行40 秒

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

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

4

1 回答 1

33

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 还将要求内存用于缓存,直到达到最大值(配置或物理最大值),然后刷新最近最少使用的页面。

于 2013-04-05T05:57:47.147 回答