SQLSERVER中的ALLOCATION SCAN和RANGE SCAN 写这篇文章的开始,我还不知道ALLOCATION SCAN的工作原理是怎样的,网上资料少得可怜 求助了园子里的某位大侠,他看了我的信息几天之后才回复我,不过他的回复里没有答案 这几天一直在苦思冥想,后来终于通过动手
SQLSERVER中的ALLOCATION SCAN和RANGE SCAN
写这篇文章的开始,我还不知道ALLOCATION SCAN的工作原理是怎样的,网上资料少得可怜
求助了园子里的某位大侠,他看了我的信息几天之后才回复我,不过他的回复里没有答案
这几天一直在苦思冥想,后来终于通过动手,验证出来了,知道ALLOCATION SCAN的工作原理是怎样的(结果中秋节过完就出差去了)
10月3日回到家马上开始动笔
在看下去之前请大家先看一下下面的文章
SQLSERVER聚集索引与非聚集索引的再次研究(上)
SQLSERVER聚集索引与非聚集索引的再次研究(下)
查看SQLSERVER内部数据页面的小插件Internals Viewer
SQLSERVER新建表的时候页面分配情况是怎样的?
存储引擎揭秘:基本结构之四——IAM页,IAM链和存储单元
SQL Server 2008存储结构之IAM结构
看这篇文章之前一定要非常清楚聚集索引页面/非聚集索引页面和IAM页面的作用
聚集索引页面:有指针,,有记录,可以准确定位到数据页面
非聚集索引页面:有指向堆中的指针,可以准确定位到数据页面
IAM页面:IAM页面只知道表中数据页面的分配情况,他不知道这些数据页面里都存储了哪些表中的记录
知识准备
我们回顾一下聚集索引的知识
一个数据页面只有一条记录
大家知道在聚集索引页面里,每一行都会指向一个数据页,如下图
SQL脚本
ct1(c1INT, c2VARCHAR(5000));t1c1ONct1(c1);;;)ct1 ,5000))ct1DBCCResult (30PageFIDNVARCHAR(200),31PagePIDNVARCHAR(200),32IAMFIDNVARCHAR(200),33IAMPIDNVARCHAR(200),34ObjectIDNVARCHAR(200),35IndexIDNVARCHAR(200),36PartitionNumberNVARCHAR(200),37PartitionIDNVARCHAR(200),38iam_chain_typeNVARCHAR(200),39PageTypeNVARCHAR(200),40IndexLevelNVARCHAR(200),41NextPageFIDNVARCHAR(200),42NextPagePIDNVARCHAR(200),43PrevPageFIDNVARCHAR(200),44PrevPagePIDNVARCHAR(200)45).--DBCCResult).TRACEON(3604,-1)PAGE(,1,175,3)56GO