select count(*) from tb是否需要扫描全部的索引中间层?

表tb有聚集索引,有13个索引中间页.
那么在select count(*) from tb时,发现全走全部的索引中间层叶.

从理论上讲,由于每个数据页都记录着它的上一个page和下一个page,那么最小的io读取应该是:
读根页--->读最小的中间页--->读数据叶子---->依次往后读全部数据页.

但实际上却是读取全部的索引中间页,谁能解释一下?

附部分代码:

SQL code
use tempdb goCREATE TABLE tmp (id int ,c1 char(500),c2 char(500)) CREATE CLUSTERED INDEX CI_id ON tmp(id) DECLARE @i INTSET @i=0WHILE @i<20129BEGIN INSERT INTO tmp(id,c1,c2) SELECT @i,'a','z' SET @i=@i+1ENDset statistics io onselect COUNT(*) from tmp DBCC IND(tempdb,tmp,-1) dbcc traceon(3604) dbcc page(tempdb,1,1666,3) dbcc page(tempdb,1,196,3) dbcc page(tempdb,1,193,3)

暂时没有人发言

我要发言

 

点击换一张验证码