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

SET STATISTICS IO 的理解

更多 时间:2014-8-26 类别:数据库 浏览量:2731

SET STATISTICS IO 的理解

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

     

     

    标签:SQL Server
    您可能感兴趣