我重新启动了SQL Server 2005并运行了一个带有统计信息IO的查询。
我得到了这些结果: 表'xxx'。扫描计数1,逻辑读取789,物理读取3,预读读取794,...
预读读取是读取并放置在缓存中的页数。那么物理读数至少应该是相同的数字吗?
另外因为它是查询的第一次运行,逻辑读取不应该是0吗? 或者是SQL Server物理读取页面,将它们放入缓存然后从缓存中读取?当缓存应为空时,为什么有逻辑读取计数?
答案 0 :(得分:4)
所有读取都是逻辑读取。
除了将页面放入缓存之外,还有一些还会导致物理读取和预读取。
据推测,它提前阅读了一些查询从未实际需要的页面,因此这个数字略大于实际的逻辑读取。
答案 1 :(得分:3)
来自MS的文档说“预读读取”正在将页面读入缓存。这不是很有用......人们会认为“物理读取”也会将生成的页面放入缓存中。
我对MS所说的重新措辞是:
我无法在任何地方找到他们这样说,但如果这不是他们真正想说的话,那么预读就毫无意义。
答案 2 :(得分:0)
我不知道这里有明确的答案,但更新统计数据也可以飙升其中一些数字。
您的查询是什么样的?什么是SQL Server版本?
不同的JOIN方法[嵌套循环,合并连接,散列连接]可以添加额外的逻辑读取。与其他版本相比,企业版具有良好的预读优化。