设为首页 收藏本站
查看: 711|回复: 0

[经验分享] SQL Server内幕之数据行的结构

[复制链接]

尚未签到

发表于 2018-10-14 08:46:52 | 显示全部楼层 |阅读模式
  表的数据行具有图6-5 所示的一般结构 (只要数据以未压缩的形式存储)。此格式称为 FixedVar 格式, 因为所有固定长度列的数据首先存储, 后跟所有可变长度列的数据。表6-7 显示了存储在每个 FixedVar 行中的信息。
DSC0000.jpg

DSC0001.jpg

  状态位 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 和可变长度列" 部分所讨论的。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-621331-1-1.html 上篇帖子: sql语句中constraint的用法 下篇帖子: SQL Server可以锁定的资源类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表