SQLServer存储引擎——05.索引的结构和分类
5. SQLServer存储引擎——索引的结构和分类
关系型数据库中以二维表来表达关系模型,表中的数据以页的形式存储在磁盘上,在SQL SERVER中,数据页是磁盘上8k的连续空间,那么,一个表的所有数据页在磁盘上是如何组织的呢?分两种情况:
一是数据页间无序、随机地存储在磁盘上,这样的表叫做堆表(表上无聚集索引);
二是数据页间按某个表字段的值有序地存储在磁盘上,这样的表做索引组织表(表上有聚集索引)。
索引是什么?从物理结构上可分为两种:聚集索引和非聚集索引。将表中的数据有序地组织起来的索引称为聚集索引,一个表只有一个聚集索引,表上其他的B树索引都是非聚集索引。
(5.1)索引的结构
聚集索引结构
1).聚集索引将表内的数据进行有序的组织,并不是指磁盘上数据页内数据的物理顺序,也不是指数据页在磁盘上的物理顺序,而是数据页间逻辑上以树型结构链接起来,结构如下:
![](/assets/blank.gif)
create table t ( ID int, NAME varchar(100) AGE int, ) GO INSERT INTO t VALUES(1,'张一',20) INSERT INTO t VALUES(2,'张二',25) INSERT INTO t VALUES(4,'张三',21) INSERT INTO t VALUES(5,'李二',23) INSERT INTO t VALUES(7,'李三',24) INSERT INTO t VALUES(8,'李四',22) GO create CLUSTERED index IX_t_ID on t(ID)
![](/assets/blank.gif)
索引组织表中的数据页,除了有IAM页进行管理,页之间还有单向或者双向链表连接。
2).聚集索引的非叶子节点(即索引节点),只包含下一节点的第一个键值(入口键值)及指向下一节点页的指针,指针的格式为:文件编号+页编号,长度为2Byte+4Byte=6Byte;
3).聚集索引的叶子节点行就是表中的数据行;
4).没有聚集索引的表,结构如下:
堆表中的数据页之间没有链表连接,随机的存放在磁盘上,仅通过IAM页进行管理。
5).数据库引擎根据系统表判断当前表为堆表/索引组织表,并查得堆表的first_IAM_page/索引组织表的first_page,即可对表展开扫描;
非聚集索引结构
1)非聚集索引是对聚集索引的索引,结构如下:
2)非聚集索引的索引节点和聚集索引一样,只包含下一节点的第一个键值(入口键值)及指向下一节点页的指针,指针的格式为:文件编号+页编号,长度为2Byte+4Byte=6Byte;
3)非聚集索引的叶子节点存储的是索引列和书签。
如果是堆表,书签为ROWID,长度为8Byte,即数据页号(4Byte)+文件号(2Byte)+槽号(2Byte)的行定位串;
如果是索引组织表,书签为聚集索引键;
create NONCLUSTERED index IX_t_AGE on t(AGE) GO SELECT * FROM t WHERE AGE=20
此时想要根据年龄20来查找数据。 如果是堆表,先根据AGE找的应该是ID=1这一行数据的8字节的ROWID,然后再根据这个ROWID去找到该行的所有数据,即(1,'张一',20); 如果是索引组织表,先根据AGE上的非聚集索引找到ID,此时ID值为1,然后再将ID=1带入聚集索引进行等值查找,最终在聚集索引的叶子节点得到该行的所有数据;
4)无论是聚集索引还是非聚集索引的叶子节点上都有一个指向上下页的指针。
(5.2)索引的分类
SQL SERVER中索引分类
(1)B+树索引 目前关系型数据库中一种常见的索引组织结构。B+树,它是一多叉平衡排序树,直到叶子节点才会命中数据,以下简称B树,可参见相关《数据结构》的书籍;
(2)全文索引 目前关系型数据库一种基于标记的索引组织结构,它不是B树结构,而是基于要索引的文本中的各个标记来创建倒排、堆积且压缩的索引结构。
(3)XML索引 随着XML文本的应用,在各个关系型数据库中也相继提供了对这种数据结构的支持。XML 实例作为二进制大型对象 (BLOB) 存储在 xml 类型列中。对于列中的每个 XML对象,索引将创建几个数据行。该索引中的行数大约等于 XML对象中的节点数。
转载于:https://www.cnblogs.com/teng-0802/p/9067437.html
SQLServer存储引擎——05.索引的结构和分类相关推荐
- Java 培训 MySQL 体系构架、存储引擎和索引结构
对某项技术进行系统性的学习,始终离不开对该项技术的整体认知.只有领略其全貌,方可将各块知识点更好的串联起来.为了进一步理解和学习 MySQL,我们有必要了解一下 MySQL 的体系构架.存储引擎和索引 ...
- 【MySQL】MySQL 存储引擎、索引、锁、集群
MySQL存储引擎 MySQL体系结构 体系结构的概念任何一套系统当中,每个部件都能起到一定的作用! MySQL的体系结构 体系结构详解 客户端连接 支持接口:支持的客户端连接,例如C.Java.PH ...
- MySQL高级-(存储引擎、索引、锁)
MySQL高级 一.MySQL存储引擎 1.MySQL体系结构 体系结构的概念 任何一套系统当中,每个部件都能起到一定的作用! MySQL的体系结构 体系结构详解 客户端连接 支持接口:支持的客户端连 ...
- MySQL - MySQL不同存储引擎下索引的实现
文章目录 生猛干货 Pre MyISAM索引实现 非聚簇(非聚集)索引 索引原理图 InnoDB索引实现 聚簇(聚集)索引 索引原理图 常见面试题 为什么建议InnoDB表必须建主键,并且推荐使用整型 ...
- mysql存储引擎 索引优化_MySQL存储引擎,索引及基本优化策略
存储引擎 与Oracle, SQL Server这些数据库不同,MySQL提供了多种存储引擎.什么是存储引擎?存储引擎其实就是一套对于数据如何存储,查询,更新,建立索引等接口的实现.不同存储引擎特性有 ...
- MySQL存储引擎 优化 索引问题
https://github.com/CyC2018/CS-Notes/blob/master/notes/MySQL.md 存储引擎的区别 InnoDB: 支持事务,是面向在线事务处理(OLTP)的 ...
- [数据库03]-约束(唯一性-主键-外键/存储引擎/事务/索引/视图/DBA命令/数据库设计三范式
[数据库03]-约束(唯一性-主键-外键)/存储引擎/事务/索引/视图/DBA命令/数据库设计三范式 一.约束 1.1 唯一性约束(unique) 1.2 主键约束 1.3 外键约束 二.存储引擎 2 ...
- MySQL存储引擎以及索引
文章目录 一.数据库引擎 1. 查看数据库引擎 2. 查看表结构 3. 查看表相关文件 4. 各存储引擎的区别 二.MySQL索引 1. 索引分类 2. 索引的创建和删除 3. 关于缓存问题 4. 过 ...
- 【MySQL进阶篇】一、存储引擎、索引
文章目录 参考资料 前言 1. 存储引擎 1.1 简介 1.2 特点 1.2.1 InnoDB 1.2.2 MyISAM 1.2.3 Memory 1.2.4 小结 1.3 存储引擎选择 1.4 总结 ...
最新文章
- WinCE项目应用之车载导航
- AI助锂电池技术 科学家有望彻底解决电池爆炸
- 在windows中安装python
- 总帐科目的批量传输与复制
- Oracle其它数据库对象:视图、序列、同义词
- 你可能过于高估了机器学习算法能力,带你解读鲜为人知的数据泄露问题
- 2、JAVA开发环境的搭建
- Python模拟入栈出栈操作
- 【7001】n阶法雷序列
- 又一个程序员在工位上倒下了!
- 【学堂在线数据挖掘:理论方法笔记】第l六天(3.31)
- html如何根据tr自动换行,css实现表格td 自动换行样式
- 计算机用户名含有中文,安装软件的时候,计算机用户名是中文名的解决办法
- 数据库从入门到精通01
- eclipse快速创建无参和有参构造函数:
- 【自然语言处理】【多模态】多模态综述:视觉语言预训练模型
- redis 的6种过期策略
- pta统计字符出现次数
- BUUCTF WEB exec+lovesql
- CORS手机测试软件,司南RTK手簿软件--测量大师操作教程(移动站CORS模式)