我们知道,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是堆表。
记得以前大学里的一些数据结构,老师讲的是数据结构:树根桩,树根桩,双向链表,二叉树。
但现在一切都回到了老师那里。
附
图片 堆表的结构
非聚集索引结构
聚集索引结构