使用的查询:
(已从某处在线复制了缓存清理代码)
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO
DBCC DROPCLEANBUFFERS
GO
SET STATISTICS TIME ON;
SET STATISTICS IO ON;
select a.a,a.b from t1 a JOIN t1 b on a.i=b.i
t1的架构是
CREATE TABLE [dbo].[t1](
[i] [int] NULL,
[a] [varchar](1000) NULL,
[b] [varchar](1000) NULL,
[c] [varchar](1000) NULL
) ON [PRIMARY]
并且t1填充了随机数据(I
范围为0-11,a,b,c填充了NEWID()
个值
它包含大约900行(准确地说是934)
执行查询的结果是:
SQL Server解析和编译时间:CPU时间= 0 ms,经过时间= 0毫秒。
SQL Server执行时间:CPU时间= 0毫秒,已用时间= 55 女士。 SQL Server解析和编译时间:CPU时间= 0 ms,已过去 时间= 0毫秒。 DBCC执行完成。如果DBCC打印错误消息, 联系您的系统管理员。
SQL Server执行时间:CPU时间= 0毫秒,已用时间= 4毫秒。 SQL Server解析和编译时间:CPU时间= 0毫秒,已用时间= 0毫秒DBCC执行完成。如果DBCC打印错误消息, 联系您的系统管理员。
SQL Server执行时间:CPU时间= 0毫秒,已用时间= 1毫秒。 SQL Server解析和编译时间:CPU时间= 0毫秒,已用时间= 0毫秒。
SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。
SQL Server执行时间:CPU时间= 0 ms,已用时间= 0 ms。
(115974行受影响)表'工作台'。扫描计数0,逻辑 读取0,物理读取0 ,预读读取0,lob逻辑读取0, lob物理读取0,lob预读读取0.表't1'。扫描计数 2,逻辑读取32,物理读取0 ,预读读取20,lob 逻辑读取0,lob物理读取0,lob预读读取0。
SQL Server执行时间:CPU时间= 79毫秒,已用时间= 15858 ms。
据我了解,干净的缓存应该会产生大量的物理读取,不应该吗?
(在Win 8主机上的Hyper V上运行的Win 8来宾VM上运行的SQL Server 2012)
答案 0 :(得分:2)
您突出显示的项目适用于在查询过程中在Worktable
中创建的tempdb
(例如假脱机)。不是需要从光盘读入的预先存在的表。
t1
的行应该显示一些物理读取和/或预读。
(编辑:没看到最初包含的内容)。以下显示来自t1
Table 't1'. Scan count 2, logical reads 32, physical reads 0, read-ahead reads 20
这意味着所有页面都通过预读机制进入缓存。