当我运行查询时,SQL Server 会缓存结果吗?
因为:当我运行以下查询时:
SELECT id
FROM Foo
WHERE Foo.Name LIKE '%bar%'
查询第一次运行40 秒。
但在第二次运行时只需要几秒钟。
这是因为执行计划以某种方式被缓存还是实际上数据被缓存,以便我可以在第二次运行时更快地检索它?
当我运行查询时,SQL Server 会缓存结果吗?
因为:当我运行以下查询时:
SELECT id
FROM Foo
WHERE Foo.Name LIKE '%bar%'
查询第一次运行40 秒。
但在第二次运行时只需要几秒钟。
这是因为执行计划以某种方式被缓存还是实际上数据被缓存,以便我可以在第二次运行时更快地检索它?
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 还将要求内存用于缓存,直到达到最大值(配置或物理最大值),然后刷新最近最少使用的页面。