首页 数据库 mysql教程 SQL Server 解析行溢出数据的存储

SQL Server 解析行溢出数据的存储

Jun 07, 2016 pm 04:22 PM
server 存储 数据 溢出 解析

SQL Server2000中最大数据行的大小为8060(我们可以使用的大小为8039),即创建表时所有列的大小总和不能超过8060。在2005中,对于定长的数据,依然保留了这个限制(不过在2005中,我们可以使用的大小为8053,而不是8039)。那么在SQL SERVER2005中对于一行是不

   SQL Server2000中最大数据行的大小为8060(我们可以使用的大小为8039),即创建表时所有列的大小总和不能超过8060。在2005中,对于定长的数据,依然保留了这个限制(不过在2005中,我们可以使用的大小为8053,而不是8039)。那么在SQL SERVER2005中对于一行是不是只能存储最多8053字节的数据呢?能不能突破8060的这个限制呢?

  在SQL SERVER2000中没有办法,但是在SQL SERVER2005中,是有可能的。在SQL SERVER2005使用变长数据,可以突破8060的限制。因为SQL SERVER2005中对数据每行记录的限制做了一定的调整,对于包含变长类型的表,每一列的长度仍然必须在每行8000以内,但是它们的合并宽度可以超过8060B的限制。

  在SQL SERVER2005中,可以把变长列存储在行溢出页面。当一个列需要从一个常规页面转移到一个行溢出页面时,,SQL 2005会保留一个包含行溢出信息的指针作为原始记录的一部分,指针的大小为24B,并且对于每个变长列,无论该列是否存储在记录中,记录还需要2个字节。

  【测试】

  create table tb(col char(7000),col2 varchar(3000),col3 varchar(3000))

  go

  insert into tb

  values('aaa',replicate('bbb',1000),replicate('ccc',1000))

  go

  dbcc ind(test,tb,-1) -–得到的页面号为89,80,6321,6315.其中89,6321为IAM页,80与6315为数据页

  dbcc traceon(3604)

  dbcc page(test,1,89,1)

  dbcc page(test,1,80,1)

  dbcc page(test,1,6321,1)

  dbcc page(test,1,6315,1)

  下面分别解析所生成的IAM页与数据页,就可以看到行溢出数据在SQL SERVER2005中是如何来进行存储的。

  一、解析IAM页

  因为89与6321页面结构是相同的,解析其中的第一即可,以89页为例。

  dbcc traceon(3604)

  dbcc page(test,1,89,1)

  得到的结果:

  1、 该页面总共两行

  2、 第一行记录了该IAM记录的数据页(后面的注释说明了该数据的作用)

  00000000: 00005e00 00000000 00000000 00000000 †--该行的长度

  00000010: 00000000 00000000 00000000 00000000 †...............

  00000020: 00000000 00000000 00000000 01005000 †--负责的数据页面id

  00000030: 00000100 00000000 00000000 00000000 †...............

  二、解析数据页

  1、 解析80页面数据:

  00000000: 30005c1b 61616120 20202020 20202020 –-前四个字节就不解释了

  ……

  00001B50: 20202020 20202020 20202020 0300f802

  -–0300总共有三列,f8 null位图,0200变长列有两列

  00001B60: 007d9b95 9b020000 65010000 00f65c00

  --虽然第二列和第三列的数据存储在另外的数据页,但每个列依然会占用两个字节。

  00001B70: 00b80b00 00ab1800 00010000 00020000

  00001B80: 65010000 00c04700 00b80b00 00ab1800

  00001B90: 00010001 00

  020000 65010000 00f65c00 00b80b00 00ab1800 00010000 00

  第一个行溢出的指针

  020000 65010000 00c04700 00b80b00 00ab1800 00010001 00

  第二个行溢出的指针

  一个长度为24字节的指针。24字节包含的部分分别如下:

0200

00

65

01000000

f65c0000

B80b0000

ab180000

0100

0000

溢出列类型

B-树种的层次

暂时不用,无实际意义

Lob数据更新的次数

用于dbcc checktable使用的一个随机值,在lob存在的周期中不会改变

该列的长度。

(计算时为00000bb8

该部分数据所在的页面号

该部分数据所在的文件号

该部分数据所在页面中的slot

  2、对于行溢出页面,使用的页面类型为LOB。对于该页面的记录方式,以后再进行叙述。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用ddrescue在Linux上恢复数据 使用ddrescue在Linux上恢复数据 Mar 20, 2024 pm 01:37 PM

使用ddrescue在Linux上恢复数据

开源!超越ZoeDepth! DepthFM:快速且精确的单目深度估计! 开源!超越ZoeDepth! DepthFM:快速且精确的单目深度估计! Apr 03, 2024 pm 12:04 PM

开源!超越ZoeDepth! DepthFM:快速且精确的单目深度估计!

谷歌狂喜:JAX性能超越Pytorch、TensorFlow!或成GPU推理训练最快选择 谷歌狂喜:JAX性能超越Pytorch、TensorFlow!或成GPU推理训练最快选择 Apr 01, 2024 pm 07:46 PM

谷歌狂喜:JAX性能超越Pytorch、TensorFlow!或成GPU推理训练最快选择

超级智能体生命力觉醒!可自我更新的AI来了,妈妈再也不用担心数据瓶颈难题 超级智能体生命力觉醒!可自我更新的AI来了,妈妈再也不用担心数据瓶颈难题 Apr 29, 2024 pm 06:55 PM

超级智能体生命力觉醒!可自我更新的AI来了,妈妈再也不用担心数据瓶颈难题

iPhone上的蜂窝数据互联网速度慢:修复 iPhone上的蜂窝数据互联网速度慢:修复 May 03, 2024 pm 09:01 PM

iPhone上的蜂窝数据互联网速度慢:修复

美国空军高调展示首个AI战斗机!部长亲自试驾全程未干预,10万行代码试飞21次 美国空军高调展示首个AI战斗机!部长亲自试驾全程未干预,10万行代码试飞21次 May 07, 2024 pm 05:00 PM

美国空军高调展示首个AI战斗机!部长亲自试驾全程未干预,10万行代码试飞21次

阿里7B多模态文档理解大模型拿下新SOTA 阿里7B多模态文档理解大模型拿下新SOTA Apr 02, 2024 am 11:31 AM

阿里7B多模态文档理解大模型拿下新SOTA

特斯拉机器人进厂打工,马斯克:手的自由度今年将达到22个! 特斯拉机器人进厂打工,马斯克:手的自由度今年将达到22个! May 06, 2024 pm 04:13 PM

特斯拉机器人进厂打工,马斯克:手的自由度今年将达到22个!

See all articles