简单的问题,但我没有在谷歌上找到一个很好的解释。使用Set Statistics IO ON时,管理工作室的消息窗口中提供了逻辑读取和扫描计数。如果我有:
tbl例如,扫描计数5,逻辑读取20
扫描计数表示什么?
答案 0 :(得分:18)
就“桌面扫描”意味着什么而言,我能找到的最好的是:
扫描计数只是表示在查询过程中访问表或索引的次数。可能是完全扫描,部分扫描或只是搜索。
换句话说,扫描计数本身就是没有足够的信息来继续。您需要确切了解这些扫描的内容 - 因此您需要查看实际执行计划以获取更多详细信息。最重要的是,它本身并不是一个非常有用的指标!
另外:
http://www.eggheadcafe.com/software/aspnet/32171165/set-statistics-io-scan-count-explanation.aspx
不幸的是,这些天的扫描计数信息量不大。嗯,好吧, 如果您看到像19223这样的数字,则可能会访问该表 通过嵌套循环连接多次。
曾经有一段时间“扫描计数”仅仅意味着“访问时间表”, 但那很久以前,也许是在SQL 6.5中。你唯一能得到的 定义为0的扫描计数使用类似...
的查询select * from TestA1 where CompanyID = 1 and CompanyID = 2
... SQL Server可以断定查询不会返回 任何行,无需访问表格。
答案 1 :(得分:14)
来自在线图书
扫描次数: 执行的索引或表扫描数。
逻辑读取: 从数据缓存中读取的页数。
物理读取: 从磁盘读取的页数。
预读: 放入查询缓存中的页数。
答案 2 :(得分:13)
如果继续收集msdn引用。然后[1]在[2]中重复:
“逻辑阅读
此值指示处理查询所需的页面访问总数。每个页面都从数据缓存中读取,无论是否有必要将该页面从磁盘带入缓存以进行任何给定的读取。此值始终至少与物理读取的值一样大并且通常大于物理读取的值。可以多次读取同一页面(例如从索引驱动查询时),因此表的逻辑读取次数可能大于表中的页数。
物理阅读
该值表示从磁盘读取的页数;它始终小于或等于逻辑读取的值。性能监视器显示的缓冲区高速缓存命中率的值是根据逻辑读取和物理读取值计算的,如下所示:
预读“
“预读读取”值表示在处理查询时使用预读机制读入缓存的页数。查询不一定使用这些页面。如果最终需要页面,则计算逻辑读取但不读取物理读取。较高的值意味着物理读取的值可能较低,缓存命中率可能高于... [由vgv8截断]
扫描计数
“扫描计数”值表示访问相应表的次数。嵌套循环连接的外表具有扫描计数1.对于内部表,扫描计数可能是访问该表的“通过循环”的次数。逻辑读取的数量由扫描计数乘以每次扫描时访问的页数之和确定。但是,即使对于嵌套循环连接,内部表的扫描计数也可能显示为1. SQL Server可能会将所需的行从内部表复制到缓存中的工作表中,并使用此工作表来访问实际的数据行。在计划中使用此步骤时,STATISTICS IO输出中通常不会显示该步骤。您必须使用STATISTIC TIME的输出以及有关所用实际处理计划的信息,以确定执行查询所涉及的实际工作。散列连接和合并连接通常将连接中涉及的两个表的扫描计数显示为1,但这些类型的连接可能涉及更多的内存。您可以在执行查询时检查sysprocesses中的memusage值,但与physical_io值不同,这不是累积计数器,仅对当前运行的查询有效。一旦查询完成,就无法查看它使用了多少内存。“
[1]
第4章查询性能故障排除监控查询性能
内部Microsoft®SQLServer™ 2005 :查询调优和优化
作者:Kalen Delaney
出版商:微软出版社
发布日期:2007年9月26日
打印ISBN-10:0-7356-2196-9
打印ISBN-13:978-0-7356-2196-1
页数:448
[2]
监控查询性能
优化查询性能
作者:Ron Soukup,Kalen Delaney
第14章来自Microsoft SQL Server 7.0内部,由Microsoft Press出版
http://technet.microsoft.com/en-us/library/cc917719.aspx#ECAA
答案 3 :(得分:9)
这里有一个全面的总结。
答案 4 :(得分:1)
忽略扫描计数,这并不重要。专注于如何降低逻辑读取。基于http://www.practicalsqldba.com/2013/07/sql-server-performance-tuning.html。