加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer——堆结构

发布时间:2020-12-12 16:07:20 所属栏目:MsSql教程 来源:网络整理
导读:堆是不含聚集索引的表 。堆的 sys.partitions 中具有一行,对于堆使用的每个分区,都有 index_id = 0 ( ? SELECT * FROM sys.partitions where index_id = 0 ?)。 默认情况下,一个堆有一个分区 。当堆有多个分区时,每个分区有一个堆结构,其中包含该特定分
sys.system_internals_allocation_units系统视图保留为仅供 Microsoft SQL Server 内部使用。不保证将来的兼容性。

可以通过扫描 IAM 页对堆进行表扫描或串行读操作来找到容纳该堆的页的扩展盘区。因为 IAM 按扩展盘区在数据文件内存在的顺序表示它们,所以这意味着串行堆扫描连续沿每个文件进行。使用 IAM 页设置扫描顺序还意味着堆中的行一般不按照插入的顺序返回


下图说明 SQL Server 数据库引擎 如何使用 IAM 页检索具有单个分区的堆中的数据行。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!


堆是不含聚集索引的表。堆的 sys.partitions中具有一行,对于堆使用的每个分区,都有 index_id = 0 (?SELECT * FROMsys.partitions where index_id = 0?)。默认情况下,一个堆有一个分区。当堆有多个分区时,每个分区有一个堆结构,其中包含该特定分区的数据。例如,如果一个堆有四个分区,则有四个堆结构;每个分区有一个堆结构。


根据堆中的数据类型,每个堆结构将有一个或多个分配单元来存储和管理特定分区的数据。每个堆中的每个分区至少有一个IN_ROW_DATA分配单元。如果堆包含大型对象 (LOB) 列,则该堆的每个分区还将有一个 LOB_DATA分配单元。如果堆包含超过 8,060 字节行大小限制的可变长度列,则该堆的每个分区还将有一个 ROW_OVERFLOW_DATA 分配单元。


sys.system_internals_allocation_units 系统视图中的列 first_iam_page 指向管理特定分区中堆的分配空间的一系列 IAM 页的第一页。SQL Server 使用 IAM 页在堆中移动。堆内的数据页和行没有任何特定的顺序,也不链接在一起。?数据页之间唯一的逻辑连接是记录在 IAM 页内的信息。

SELECT * FROM sys.system_internals_allocation_units?

重要提示:
    推荐文章
      热点阅读