表组织和索引组织

表组织和索引组织

表和索引作为 8 KB 页的集合存储。本主题介绍表页和索引页的组织方式。

<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl077fe05bb,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl07img,"; </script>
<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl10de85023,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl10img,"; </script> 聚集表、堆和索引聚集表、堆和索引

SQL Server 2005 表使用下列两种方法之一来组织其分区中的数据页:

索引视图与聚集表具有相同的存储结构。

当堆或聚集表具有多个分区时,每个分区都有一个堆或 B 树结构,其中包含该指定分区的行组。例如,如果一个聚集表有 4 个分区,那么将有 4 个 B 树,每个分区一个。

非聚集索引

非聚集索引与聚集索引有一个相似的 B 树索引结构。不同的是,非聚集索引不影响数据行的顺序。叶级别包含索引行。每个索引行包含非聚集键值、行定位符和任意包含性列或非键列。定位符指向包含键值的数据行。有关详细信息,请参阅非聚集索引结构

XML 索引

可以对表中的每个 xml 列创建一个主 XML 索引和多个辅助 XML 索引。XML 索引是 xml 数据类型列中的 XML 二进制大型对象 (BLOB) 的拆分和持久化的表示形式。XML 索引以内部表的形式存储。若要查看有关 XML 索引的信息,请使用 sys.xml_indexessys.internal_tables 目录视图。

有关 XML 索引的详细信息,请参阅 xml 数据类型列的索引

聚集索引结构
<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl170a93c45,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl17img,"; </script> 分配单元分配单元

分配单元是堆或 B 树内用于根据页类型管理数据的页集合。下表列出了用于管理表和索引中的数据的分配单元类型。

分配单元类型 用于管理

IN_ROW_DATA

包含除大型对象 (LOB) 数据以外的所有数据的数据行或索引行。

页的类型为 Data 或 Index。

LOB_DATA

以下列一种或多种数据类型存储的大型对象数据:textntextimagexmlvarchar(max)nvarchar(max)varbinary(max) 或 CLR 用户定义类型 (CLR UDT)。

页的类型为 Text/Image。

ROW_OVERFLOW_DATA

存储在超过 8,060 字节行大小限制的 varcharnvarcharvarbinarysql_variant 列中的可变长度数据。

页的类型为 Data。

有关页类型的详细信息,请参阅

在堆或 B 树的特定分区中,每种类型只能有一个分配单元。若要查看表或索引的分配单元信息,请使用 sys.allocation_units 目录视图。

IN_ROW_DATA 分配单元

对于表(堆或聚集表)、索引或索引视图使用的每个分区,只有一个 IN_ROW_DATA 分配单元,它由一个数据页集合构成。此分配单元还包含其他页集合,这些集合用来实现为表或视图定义的每个非聚集索引和 XML 索引。表、索引或索引视图的每个分区中的页集合由 sys.system_internals_allocation_units 系统视图中的页指针定位。

重要提示:
sys.system_internals_allocation_units 系统视图仅供内部使用,随时可能更改。不保证兼容性。

 

 

每个表、索引和索引视图分区在 sys.system_internals_allocation_units 中有一行,该行由容器 ID (container_id) 唯一标识。容器 ID 与 sys.partitions 目录视图中的 partition_id 之间具有一对一的映射,用于维护分区中存储的表、索引或索引视图数据与用来管理分区内数据的分配单元之间的关系。

表、索引或索引视图分区的页分配由一个 IAM 页链管理。sys.system_internals_allocation_units 中的 first_iam_page 列指向 IAM 页链(用于管理分配给 IN_ROW_DATA 分配单元中的表、索引或索引视图的空间)中的第一个 IAM 页。

sys.partitions 为表或索引中每个分区返回一行。

  • 堆在 sys.partitions 中有一行,其 index_id = 0。
    sys.system_internals_allocation_units 中的 first_iam_page 列指向指定分区中堆数据页集合的 IAM 链。服务器使用 IAM 页查找数据页集合中的页,因为这些页没有链接。
  • 表或视图的聚集索引在 sys.partitions 中有一行,其 index_id = 1。
    sys.system_internals_allocation_units 中的 root_page 列指向指定分区内聚集索引 B 树的顶端。服务器使用索引 B 树查找分区中的数据页。
  • 为表或视图创建的每个非聚集索引在 sys.partitions 中有一行,其 index_id > 1。
    sys.system_internals_allocation_units 中的 root_page 列指向指定分区内非聚集索引 B 树的顶端。
  • 至少有一个 LOB 列的每个表在 sys.partitions 中也有一行,其 index_id > 250。
    first_iam_page 列指向管理 LOB_DATA 分配单元中的页的 IAM 页链。

ROW_OVERFLOW_DATA 分配单元

对于表(堆或聚集表)、索引或索引视图使用的每个分区,都有一个 ROW_OVERFLOW_DATA 分配单元。此分配单元包含零 (0) 页,直到 IN_ROW_DATA 分配单元中带有可变长度列(varcharnvarcharvarbinarysql_variant)的数据行超过 8 KB 的行大小限制。达到大小限制后,SQL Server 将把最宽的列从该行中移动到 ROW_OVERFLOW_DATA 分配单元中的页中。原始页上将维护一个指向此行外数据的 24 字节指针。

ROW_OVERFLOW_DATA 分配单元中 Text/Image 页的管理方式与 LOB_DATA 分配单元中页的管理方式相同。即,使用 IAM 页链管理 Text/Image 页。

LOB_DATA 分配单元

当表或索引有一个或多个 LOB 数据类型时,将为每个分区分配一个 LOB_DATA 分配单元,以管理该数据的存储。LOB 数据类型包括 textntextimagexmlvarchar(max)nvarchar(max)varbinary(max) 和 CLR 用户定义类型。

页和区
<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl20f901eb5,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl20img,"; </script> 分区和分配单元示例分区和分配单元示例
<script type="text/Javascript"> var ExpCollDivStr = ExpCollDivStr; ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl2379d0eaf,"; var ExpCollImgStr = ExpCollImgStr; ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl23img,"; </script> 请参阅请参阅
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值