深入了解SQLServer的非聚集索引结构

深入了解SQLServer的非聚集索引结构
我们知道,SQL Server的数据行的存储有两个数据结构:一:一堆B B树(二元二叉树)

数据按两种类型之一进行排序和存储。已经学过数据结构的朋友应该知道两叉树和为什么两叉树,因为它很容易用两点搜索法来快速。

查找数据。如果数据没有堆排序,那么以任何顺序,也没有任何数据结构,页面不是端到端的,与B树数据页不同。

使用双向连接的端到端。堆表仅通过表单的IAM页(索引分布映射页)连接堆的页面,而页码、页面位置则记录在IAM中。

除非表中有聚集索引,否则表单中数据的存储是堆结构。

那么非聚集索引也是堆结构吗事实上,SQLServer有几页类型(数据存储在一页一页,就像Windows的内存也由页)。

其中一个是索引页,一个是数据页。

我觉得很多书都不清楚。就像我一样,文章开头也是这样:数据行存储有两个数据结构:A:堆B:B树(两叉树)。

我认为应该是数据页的存储有两种数据结构:1、堆2、B tree

让我们从它开始:索引页面,无论是集群还是非集群,都存储在索引页中,索引页存储在B树的结构中。

堆:这是实际的数据行。如果表中没有索引,则实际数据将放在堆栈页上。如果聚集索引,那么数据将放在索引页上。

B树中的节点实际上称为页面,在B树中也称为节点,将有一个页面:根页(即根节点),非聚集索引和聚集索引是相同的。

因此,数据行的存储有两种数据结构:A:堆B:B树(两叉树)

这句话应该明白吗

据说堆中的数据页是完全随机存储的,数据页之间唯一的逻辑连接被记录在IAM页面中,因此IAM页面也充当根页面的角色。
那么聚合索引也是堆结构吗

非聚集索引放在索引页、B树结构上,数据仍然放在堆页上。如果数据页放在堆中,它不象放置在B树叶节点中的聚集索引。

(即在索引页),非聚集索引如何与实际数据关联

答案是:在非聚集索引中的叶子节点(叶子页)中会有一个行定位器,以及一个行定位器在以下红色单词中的作用

非聚集索引和聚集索引具有相同的B树结构,它们之间的显著区别在于以下两点:

(1)基表的数据行没有按非聚集键的顺序进行排序和存储。

(2)非聚集索引的叶层是由索引页而不是数据页组成的。

(3)设置非聚集索引的表可以是B树或堆。

(4)如果表是堆(意味着表没有聚合索引),行定位器指向行的指针。指针是由文件标识符id生成的:页面上的行数:页面上的行数。

指针称为行ID(去掉)。

(5)如果有一个聚集索引聚集索引或索引视图,行定位器将指向聚集索引的叶key.sql通过使用存储在非聚集索引

指针(指向聚集索引键)搜索聚合索引来检索实际数据

非聚集索引不会改变或改进实际数据页的存储模式

但是,具有聚集索引的非聚集索引是相同的,等效索引。

最后,总结一下,这样一篇短文的总结是什么

当然,这是对表格结构的总结,因为有人曾经问过论坛中一个表的结构。

a具有聚合索引或聚合索引,其索引为非聚集索引(b树)。

B没有索引(堆)

C没有聚合索引,并且有一个非聚合索引(b树+堆)

在论坛中,A被简称为聚合表,而b和c是堆表。

记得以前大学里的一些数据结构,老师讲的是数据结构:树根桩,树根桩,双向链表,二叉树。

但现在一切都回到了老师那里。

图片

堆表的结构
非聚集索引结构
聚集索引结构

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部