浅谈sql server索引结构
来源:互联网 发布:linux下zip版本 编辑:程序博客网 时间:2024/06/05 18:37
浅谈sql server索引结构
我们都知道sqlserver数据行的存储结构有两种:堆(heap)和B树(binary二叉树)。
学过数据结构的人都知道,二叉树的优点是:快速使用二分法找到数据,数据页面使用双向链表首尾相连。
再介绍一下数据结构中的堆(heap)。堆中的数据没有任何顺序,数据页面也不会首尾相连。
那怎么在堆中查找数据呢? 堆的结构及IAM结构如下:
如图所示:堆表只依靠表里的IAM页(索引分配映射页)将堆的页面联系在一起,IAM中记录了页面编号和页面位置。由此可以通过IAM扫描数据。
1.很多书中都讲到sqlserver数据行的存储结构有两种:堆(heap)和B树(binary二叉树)。而我觉得sqlserver数据页的存储结构有两种:堆(heap)和B树(binary二叉树)。
2.数据都存在页面中,sqlserver页面有两种类型:数据页和索引页。索引页都是按照B树结构存储的。
那么重点来了:
不管是聚集索引,还是非聚集索引,索引数据都存放在索引页中。
表中如果有聚合索引,那么数据全部存储在索引页中。
表中如果只有有非聚合索引,那么数据存在堆页(也就是实际的数据行),但是索引数据存储在索引页中。
表中如果既有聚集索引,也有非聚集索引,那么数据和索引都存放在索引页中。
B树结构中,每一个节点就是一个页面,B树里会有一页:root page(亦即是根节点),非聚集索引和聚集索引都是一样的。
下面开始步入正轨介绍索引:
聚集索引:
有人会问为什么一张表只能有一个聚集索引,简单来说因为表只能以一种顺序排列在磁盘中,所以表只能有一个聚集索引。而非聚集索引能有好几个。
聚集索引因为数据全部存放在索引页中,所以顺着聚集索引就可以查到数据。聚集索引结构如下:
非聚集索引:
1.如果非聚集索引的数据放在堆表中(表示没有聚集索引),而非聚集索引的数据放在索引页中。那么非聚集索引怎么查找数据呢?在非聚集索引的叶子节点(即叶子页面)有行定位器,行定位器指向行的位置。由文件标示符、页码、行上的行数组成。整个指针称为行ID(RID)。
2.如果非聚集索引的数据放在索引表中(表示有聚集索引),那怎么查找数据呢?则行定位器会指向聚集索引键。SQL使用非聚集索引叶子节点的指针指向的聚集索引键值,来查找数据。
0 0
- 浅谈sql server索引结构
- SQL Server索引结构
- SQL Server 索引结构及其使用
- 转载--SQL Server 索引结构及其使用
- SQL Server 索引结构及其使用(一)
- SQL Server 索引结构及其使用
- SQL Server 索引结构及其使用
- SQL Server 索引结构及其使用
- SQL Server 索引结构及其使用
- SQL Server 索引结构及其使用
- 【转载】SQL Server 索引结构及其使用
- SQL Server 索引结构及其使用
- SQL Server 索引结构及其使用
- 转帖 SQL Server 索引结构及其使用
- SQL Server 索引结构及其使用
- SQL Server 索引结构及其使用
- SQL Server 索引结构及其使用
- SQL Server 索引结构及其使用
- Android学习之Service练习
- CVS和RCS的一个简单例子
- 常用博客
- 谷歌设计师的Material Design实践心得
- strcpy/strcmp/memcpy/memcmp/strstr/ 的内部实现(转载)
- 浅谈sql server索引结构
- hdu 4424 Conquer a New Region (并查集)
- ffmpeg 1.0 filter模块AVFilterPad结构的权限属性min_perms/rej_perms分析
- 2015百度移动端研发面试小记
- RequestDispatcher ----- getRequestDispatcher()与sendRedirect()的区别
- Maven和 Sonatype Nexus私服的安装、配置及使用入门
- 第七章 7.2节练习
- STL之Input & Output Iterator
- 不要羡慕别人