表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)

暂时没有人发言