我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL Server内幕之数据行的结构

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL Server内幕之数据行的结构

表的数据行具有图6-5 所示的一般结构 (只要数据以未压缩的形式存储)。此格式称为 FixedVar 格式, 因为所有固定长度列的数据首先存储, 后跟所有可变长度列的数据。表6-7 显示了存储在每个 FixedVar 行中的信息。

SQL Server内幕之数据行的结构


SQL Server内幕之数据行的结构

状态位 A 包含指示行属性的位图。这些位具有以下含义:


Bit 0 表示特殊的版本控制信息。在 SQL server 2012 中, 这始终是0。

Bits 1到3作为3位值, 

0 (000) 表示主记录, 

1 (001) 表示转发的记录, 

2 (010) 表示转发存根, 

3 (011) 指示一个索引记录, 

4 (100) 指示一个 BLOB 片段或行溢出数据, 

5 (101) 表示虚影索引记录, 

6 (110) 表示虚影数据记录, 

7 (111) 表示虚影版本记录。


Bit 4 表示存在空位图。在 SQL server 2012 中, 即使在任何列中都不允许有 null, 

也始终存在空位图。


Bit 5 表示行中存在可变长度列。


Bit 6 表示该行包含版本控制信息。


Bit 7 在 SQL server 2012 中不使用。



状态位 B 字段中使用的唯一位表示该记录是虚影转发的记录。



您可以在图6-5 和表6-7 中看到第三个和第四个字节指示行的固定长度部分的长度。如图6-5 所示, 它的长度不包括2个字节的列数和空位图, 这取决于表中列的总数, 这是可变长度。解释这些位中数据的另一种方法是, 在该行中可以找到列数的位置。例如, 如果第三个和第四个字节 (字节 2–3) 包含值 0x0016 (即十进制 22), 则表示该行不仅在列数的值之前有22个字节, 而且还意味着可以在字节22中找到列数的值。



在每个固定长度或可变长度数据块中, 数据以创建表的列顺序存储。例如, 假设使用以下命令创建了一个表:


CREATE TABLE Test1

(

Col1 int NOT NULL,

Col2 char(25) NOT NULL,

Col3 varchar(60) NULL,

Col4 money NOT NULL,

Col5 varchar(20) NOT NULL

);


此行的固定长度数据部分包含 Col1 的数据, 后跟 Col2 的数据, 后跟 Col4 的数据。可变长度数据部分包含 Col3 的数据, 后跟 Col5 的数据。对于仅包含固定长度数据的行, 以下值为 true。


数据行第一个字节的第一个十六进制数字为 1, 表示不存在可变长度列。(第一个十六进制数字包括位4到 7; bits 6 和7总是 0, 如果不存在变长列, 则位5也是0。位4始终为 1, 因此四位的值显示为1。


数据行结束于空位图之后, 它遵循固定长度的数据 (即, 图6-5 中显示的阴影部分不会存在于只有固定长度数据的行中)。


每个数据行的总长度是相同的。



具有任何可变长度列的数据行有一个列偏移量数组, 每个非 NULL 可变长度列都有一个2字节的条目, 指示列在其中结束的行中的位置。(术语偏移和位置不是完全可互换的。偏移量是基于0的, 而位置是基于1的。偏移量为7的字节位于行中的第八字节位置。)存储具有 NULL 值的可变长度列涉及一些特殊问题, 如后面的 "null 和可变长度列" 部分所讨论的。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL Server内幕之数据行的结构

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【SQL SERVER】数据内部存储结构简单探索

探索数据库内部存储数据存储结构,将从数据库内部如何存储数据,索引数据如何存储,操作数据对存储影响,最后总结。  数据库经常需要打交道,但是从来没想过数据库内部是如何存储数据。 今天探索一下数据库内部如何存储数据,从下面几个方面探索数据库内部如何存
【SQL SERVER】数据内部存储结构简单探索
2014-08-04

【SQL SERVER重新认识】数据内部存储结构简单探索

探索数据库内部存储数据存储结构,将从数据库内部如何存储数据,索引数据如何存储,操作数据对存储影响,最后总结。  数据库经常需要打交道,但是从来没想过数据库内部是如何存储数据。 今天探索一下数据库内部如何存储数据,从下面几个方面探索数据库内部如何存
【SQL SERVER重新认识】数据内部存储结构简单探索
2018-10-22

SQL笔记之数据库结构优化方式

数据库结构优化是指通过调整数据库结构以提高查询效率的措施。优化方案包括:选择合适的数据类型规范化数据库创建索引分区表使用视图和物化视图表分区及数据类型转换正确创建和使用索引类型定期更新数据库统计信息
SQL笔记之数据库结构优化方式
2024-04-02

Java数据结构之链表的概念及结构

这篇文章主要介绍了数据链表的概念及结构,链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。想进一步了解的同学,可以参考阅读本文
2023-05-14

Redis之SDS数据结构的使用

目录序言字符串char*字符串数组简单动态字符串SDS序言Redis的几种基本数据结构有字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set),这些是最常见的,也能在官网上查看到。官
2022-08-08

PHP数据结构之图存储结构的示例分析

这篇文章主要介绍PHP数据结构之图存储结构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!图的存储结构图的概念介绍得差不多了,大家可以消化消化再继续学习后面的内容。如果没有什么问题的话,我们就继续学习接下来的
2023-06-20

Sql Server 数据把列根据指定的内容拆分数据

今天由于工作需要,需要把数据把列根据指定的内容拆分数据其中一条数据实例 select id , XXXX FROM BIZ_PAPER where  id ="4af210ec675927fa016772bf7dd025b0"   拆分方法: select t
Sql Server 数据把列根据指定的内容拆分数据
2020-11-04

编程热搜

目录