您的位置:首页 > 数据库 > 其它

SET STATISTICS IO 的理解

更多 2014/8/26 来源:数据库学习浏览量:3485
学习标签: SQL Server
本文导读:SQL Server中SET STATISTICS IO用来显示有关由 Transact-SQL 语句生成的磁盘活动量的信息。SET STATISTICS IO 是在执行或运行时设置,而不是在分析时设置。将该选项设置为 ON 后,所有的后续 Transact-SQL 语句将返回统计信息,直到将该选项设置为 OFF 为止。下面介绍SET STATISTICS IO 的具体意思

SET STATISTICS IO ON这个开关能够输出语句做的物理读和逻辑读的数目。对分析语句的复杂度有很重要的作用

 

一、语法

SET STATISTICS IO { ON | OFF }

 

二、注释

 

当 STATISTICS IO 为 ON 时,显示统计信息。为 OFF 时,不显示统计信息。

将该选项设置为 ON 后,所有的后续 Transact-SQL 语句将返回统计信息,直到将该选项设置为 OFF 为止。

 

三、SET STATISTICS IO实例分析

 
SQL 代码   复制
DBCC DROPCLEANBUFFERS
 GO
 SET STATISTICS IO ON
 GO
 
 SELECT DISTINCT([ProductID]),[UnitPrice] FROM [dbo].[SalesOrderDetail_test]
 WHERE [ProductID]=777
GO

 

其返回的统计情况如下

 

(4 行受影响)


表 'SalesOrderDetail_test'。扫描计数 5,逻辑读取 15064 次,物理读取 0 次,预读 15064 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

 

四、统计信息的解释

 

:表的名称。这里的表就是SalesOrderDetail_test

扫描计数:执行的扫描次数。按照执行计划,表格被扫描了几次。一般来讲大表扫描的次数越多越不好。唯一的例外是如果执行计划选择了并发运行,由多个thread线程同时做一个表的读取,每个thread读其中的一部分,但是这里会显示所有thread的数目。也就是有几个thread在并发做,就会有几个扫描。这时数目大一点没问题的。

 

逻辑读取:从数据缓存读取的页数。页数越多,说明查询要访问的数据量就越大,内存消耗量越大,查询也就越昂贵。

可以检查是否应该调整索引,减少扫描的次数,缩小扫描范围

 

物理读取:从磁盘读取的页数

 

预读:为进行查询而预读入缓存的页数

 

物理读取+预读:就是SQLSERVER为了完成这句查询而从磁盘上读取的页数。如果不为0,说明数据没有缓存在内存里。运行速度一定会受到影响

 

LOB逻辑读取:从数据缓存读取的text、ntext、image、大值类型(varchar(max)、nvarchar(max)、varbinary(max))页的数目

 

LOB物理读取:从磁盘读取的text、ntext、image、大值类型页的数目

 

LOB预读:为进行查询而放入缓存的text、ntext、image、大值类型页的数目

 

 

五、第二次运行上面SQL语句

 

返回的统计结果

表 'SalesOrderDetail_test'。扫描计数 5,逻辑读取 15064 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次, lob 物理读取 0 次,lob 预读 0 次。

 

这次逻辑读取不变,还是15064页。但是物理读取和预读都是0了。说明数据已经缓存在内存里,第二次运行不需要再从磁盘上读一遍,节省了时间。所以为了不影响其他测试,请运行下面语句关闭SET STATISTICS IO OFF

 

 

收藏
398
很赞
72
您可能感兴趣