0
点赞
收藏
分享

微信扫一扫

Sqlserver 高级篇 非聚集索引原理


原理

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

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

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

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

非聚集索引可以有多个

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

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

Sqlserver 高级篇 非聚集索引原理_数据库

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

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

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

Sqlserver 高级篇 非聚集索引原理_数据_02

Sqlserver 高级篇 非聚集索引原理_Sqlserver_03

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

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

Sqlserver 高级篇 非聚集索引原理_数据_04

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

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

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

一看是2

Sqlserver 高级篇 非聚集索引原理_数据_05

就知道是非聚集索引

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

Sqlserver 高级篇 非聚集索引原理_非聚集索引_06

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

Sqlserver 高级篇 非聚集索引原理_数据_07

在去page706 找到信息 显示出来

Sqlserver 高级篇 非聚集索引原理_数据_08

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

非聚集索引创建

1)语句创建

Create nonclustered index... on...

non_Name (索引名)

TStudent(Sname)(表(列))

Create nonclustered index non_Name on TStudent(Sname)

2)Slqserver 工具创建

右击列 选择 索引/键 

Sqlserver 高级篇 非聚集索引原理_非聚集索引_09

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

Sqlserver 高级篇 非聚集索引原理_非聚集索引_10

举报

相关推荐

0 条评论