公司内部培训SQL Server传统索引结构PPT分享
下载地址
SQL优化 讲课
下载地址
http://files.cnblogs.com/files/lyhabc/SQL%E4%BC%98%E5%8C%96%E8%AE%B2%E8%AF%BE.rar
PPT有不对的地方,多多拍砖o(∩_∩)o
索引结构
f
f
一页只能存储8060字节实际用户数据
表只有一列,并且数据类型为int的话,可以存储2015个值
f
f
f
f
f
页拆分
一个页装不下所有条目,页拆分过程:为索引分配两个额外的页
现有的rootpage 下降成一个叶级页。SQL Server获取索引页一半数据,把这一半数据移动到一个新分配的页面。另一个新页则放在索引结构的顶部,成为新的rootpage,整个过程的最后一步是获取每个叶级页的第一个条目,并将那些条目写入新创建的rootpage中
f
rootpage的2015行对应于中间级页面的2015个页,每个中间级页面也有2015个条目,它们对应于叶级的2015个页,最后加一个用于触发新层级的数据行(2015 3次方+1)
在成长到超过80亿多行后,才需要扫描三个索引页
rootpage已经到了存储极限,他不能容纳2016个条目,因为那会使他超过最大允许的8060字节,因此,SQL Server会再次经历一次“页拆分”过程,以前的rootpage变成一个中间级页,同时创建一个新的中间级页。以前的rootpage分一半条目给新建的中间级页。同时,两个中间级页的第一个条目都写入新的rootpage
所以SQL Server是B*树
f
f
空间索引
空间数据用一个二维坐标系统定义,索引用B树构建,而B树是一个线性结构
f
由于几何平面是无限的,所以不能为所有可能的二维空间都一定一个B树
f
交换分区的原理
假设一个表只有一个字段int类型 4字节,那么
一个页面实际数据8060字节除以4字节 得出一个页面可以存储2015行数据
8060/4=2015
扇出值就是2015
一个父节点可以有2015个孩子
二级
2015*2015=4060225 行
2016个页面
三级
2015*2015*2015=8181353375 行
4060226个页面
f
SQL Server2008数据库技术内幕P165
BOOT PAGE里面的dbi_firstSysIndexes项指向sys.sysallocunits数据字典表
f