首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IO指数搜寻统计数字

IO指数搜寻统计数字
EN

Database Administration用户
提问于 2018-09-04 08:32:27
回答 1查看 199关注 0票数 2

统计IO (逻辑/物理读取)是否包括非叶级索引页?

下面的示例是直接从盖尔·肖的这一旧职位中删除的:

https://sqlinthewild.co.za/index.php/2009/03/05/when-is-a-seek-actually-a-scan/

代码语言:javascript
复制
--Setup
CREATE TABLE TestingSeeks (
    id int identity (1,1) not null,
    SomeStr char(6) default '' -- a filler
)

insert into TestingSeeks (SomeStr)
select top (500000) ''
from sys.columns c1 cross join sys.columns c2

CREATE NONCLUSTERED INDEX idx_Seek ON TestingSeeks (id)


--Example queries
--Query 1
select  id
from    TestingSeeks

--Query 2
select  id
from    TestingSeeks
where   id > 0

-查询1的统计IO输出

(500000排(S)受影响)表“测试西克斯”。扫描计数1,逻辑读取1120,-所有其他列为零。

-查询2的统计IO输出

(500000排(S)受影响)表“测试西克斯”。扫描计数1,逻辑读取1120,-所有其他列为零。

正如您所看到的,对于两个查询(查找和扫描),逻辑读取都是相同的,但是我认为搜索将有更多的页面可读取,因为它将从索引的中间层(S)读取根页和页。

如果我运行以下查询:

代码语言:javascript
复制
--Seek for one row
--Query 3
select  id
from    TestingSeeks
where   id = 400

-查询3的统计IO输出

(1排(S)受影响)表“试用表”。扫描计数1,逻辑读3,-所有其他列为零。

您可以看到有三次读取(1.根页,2.中间页,3.叶级页),那么为什么上面查询2的统计数据不包括比扫描多两行(查询1)?

Server @@Version: Microsoft 2014 (SP2-GDR) (KB4057120) - 12.0.5214.6 (X64) 2018年1月9日15:03:12版权(c) Edition (64位) on Windows 6.1 (Build 7601: Service Pack 1)

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-09-04 11:32:48

是的,逻辑读取包括非叶级索引页。

对于第一个查询中的索引扫描,第一个逻辑页的位置是遍历b树以找到第一个索引叶页,然后按照逻辑顺序扫描整个索引。这些统计数据包括2个非叶页和所有索引叶页。

对于第二个查询中的索引查找,第一个符合条件的逻辑页通过遍历b树,然后扫描叶页来定位。这些统计数据包括相同的2页非叶页,定位第一页所需的全部扫描(假设在键值0之前或在第一页中不存在行)。相同数量的叶页会被触及,因为所有页面都符合搜索谓词的条件。

第三个查询中的相等谓词与前两个查询的b-树层次结构中的非叶页的数量相同,尽管可能不同的非根页,但是只需要一个叶页来满足谓词,总共有3个逻辑的IOs。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/216638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档