为什么在 SQL Server 中首次执行查询时“物理读取”少于“预读”和“逻辑读取”?

Ton*_*ich 5 sql-server sql-server-2005

我重新启动了 SQL Server 2005 并运行了一个带有统计 IO 的查询。

我得到了这些结果:表'xxx'。扫描计数 1,逻辑读取 789,物理读取 3,预读读取 794,...

预读读取是读取并放置在缓存中的页数。那么物理读数不应该至少是相同的数字吗?

也因为它是查询的第一次运行,逻辑读取不应该是 0 吗?还是 SQL Server 物理读取页面,将它们放入缓存,然后从缓存中读取?当缓存应该为空时,为什么要对逻辑读取进行计数?

Mar*_*ith 4

所有读取都是逻辑读取。

除了将页面放入高速缓存之外,有些还会引发物理读取和预读读取。

据推测,它会提前读取查询实际上从未需要的几页,因此该数字略大于实际的逻辑读取。

  • 不。它有两种不同的机制将页面放入缓存。当它意识到可能正在读取页面的连续部分时,它将使用[预读机制](http://msdn.microsoft.com/en-us/library/ms191475.aspx) 在之前引入其他页面它们实际上是您的查询所请求的。因此,在需要它们时,这些内容已经在缓存中,并且 SQL Server 不需要执行特定的物理读取来获取该页面。 (2认同)