Sqlserver 高级篇 非聚集索引原理

原理

最好看一下 这些章节帮助理解

Sqlserver 高级篇 理解存储原理 (数据库页概念)

 Sqlserver 高级篇 数据存储(堆概念,索引)

非聚集索引  非聚集索引是数据库按照 用户所设置的索引列 创建了多个排序好的索引页  每次查找 都遍历索引页 毕竟 遍历索引页 比直接遍历所有数据要快

非聚集索引可以有多个

唯一索引 (我们设置好的唯一约束)也是非聚集索引 只不过多了一个唯一属性

看一个图 来解释 非聚集索引 查询数据原理

Sqlserver 高级篇 非聚集索引原理

数据库查询用的是B树算法  就像大树一样 从树干 到树枝到各种树叶 成扩散状

这一部分 我理解就是非聚集索引 所创建的 页 

我们通过SQL 创建一个非聚集索引 比如 名字  数据库就会创建很多按照名字排序的页 

Sqlserver 高级篇 非聚集索引原理

Sqlserver 高级篇 非聚集索引原理

我们详细看一下 页里面的内容 

前面是非聚集索引键 (名字)后面 4:706:01 的意思是在ID为4数据库文件里 的706页里的01行数据

Sqlserver 高级篇 非聚集索引原理

 

从数据查询语句开始 我们看一下 查询过程

如果 sql是 select * from ST where Name = 'Marthin'  and 执行

首先 数据库会去查询 SYSindexes 看indid里的字段是什么 1是聚集索引 0 是无索引 别的就是非聚集索引比如(2,3,4,5,6....)

一看是2

Sqlserver 高级篇 非聚集索引原理

就知道是非聚集索引

去查第一个索引页 找到Marthin 看存储在 Page 28 然后看 Marthin 存在page61页

Sqlserver 高级篇 非聚集索引原理

再去遍历page61页 找到所在页信息 

Sqlserver 高级篇 非聚集索引原理

在去page706 找到信息 显示出来

Sqlserver 高级篇 非聚集索引原理

这就是 非聚集索引 查询的一个过程

 

非聚集索引创建

1)语句创建

Create nonclustered index... on...

non_Name (索引名)

TStudent(Sname)(表(列))

Create nonclustered index non_Name on TStudent(Sname)

2)Slqserver 工具创建

右击列 选择 索引/键 

Sqlserver 高级篇 非聚集索引原理

表的 索引就会有一个Name的非聚集索引

Sqlserver 高级篇 非聚集索引原理