码迷,mamicode.com
首页 > 数据库 > 详细

SQL存储原理及聚集索引、非聚集索引、唯一索引、主键约束的关系(新)

时间:2015-06-14 19:48:35      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

堆(Heap)

之所以这个结构称为堆,是因为它不以任何人为指定的逻辑顺序进行排列。而是按照分区组队数据进行组织。也就是说,是按照磁盘的物理顺序。只要需要读取的数据文件没有文件系统碎片(注意和下面提到的索引的碎片区分),这个读取过程在磁盘中就可以连续的进行,没有多余的磁盘臂移动。而磁盘臂移动是I/O操作中开销最大的操作。

堆使用一个bitmap结构来管理数据的分配。也就是它会告诉你两个结果,这个区是分配了,还是没有分配。每一个区中的物理顺序如下图。

技术分享

(此图倒数第二行的数字有错误,应该加1)

PS:IAM链知识

Sytem_internals_allocation_units存放第一个数据页和第一个IAM页的指针。IAM按照数据页的顺序存放数据页的指针。数据页之间并无直接链接。

接下来查看IAM的信息,如下:

Slot 0 = (1:79)                      Slot 1 = (1:89)                      Slot 2 = (1:90)

Slot 3 = (1:93)                      Slot 4 = (1:94)                      Slot 5 = (1:109)

Slot 6 = (1:110)                     Slot 7 = (1:114)  

IAM: Extent Alloc Status Slot 1 @0x592EC0C2

 

(1:0)        - (1:176)      = NOT ALLOCATED                              

(1:184)      - (1:192)      =     ALLOCATED                              

(1:200)      - (1:376)      = NOT ALLOCATED 

加亮部分表明了IAM对应的分区信息,以及第一个数据页面指针指向79页。这与我们查询出的first_page值是一致的。一个IAM页面对应8个数据页,当超过8个数据页时,系统会从其对应的4GB空间(约512000个页面)中分配统一区的页面。当数据页超过可分配的页面数时,建立新的IAM页。

这里只有8个slot,8个临时存放数据页,当分配数据页超过8个混合分区后,系统会为数据表分配统一分区。(这里的每一个分配区间都是从区的第一个开始算的,比如说192那个指的是192-199)

每一个指针都指向一个数据页。当分配数据页超过8个混合分区后,系统会为数据表分配统一分区。这里,系统为数据表分配184~191, 192~199两个统一分区。每个分区包含8页,加上8个混合分区的页面,一共是25个页面。这25个页面中,使用了19个数据页,加上1个IAM页共使用了20个页面。因为统一分区是顺序分配的, 所以可以计算出从195~199的页面没有被使用。用DBCC可以验证这个推算。

下面我们把插入的数据删除,然后再查看IAM的页面分配情况,发现页面分配不会因为数据删除而改变,数据页内仅仅是将数据清空而已。

SQL存储原理及聚集索引、非聚集索引、唯一索引、主键约束的关系(新)

标签:

原文地址:http://www.cnblogs.com/guangshan/p/4575523.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!