第8周 翻译《Pro SQL Server Internals, 2nd edition》中的Data Pages and Data Rows部分

原文来源:《Pro SQL Server Internals, 2nd edition》的CHAPTER 1 Data Storage Internals中的Data Pages and Data Rows一节(即P8~P14)

作者:Dmitri Korotkevitch

                                                    数据页和数据行

数据库中的空间被划分为8KB的逻辑页面。这些页面从0开始编号,可以通过指定文件ID和页码引用它们。页面编号始终是连续的,因此当SQL Server增加数据库文件时,新页面的编号从文件中最大的页码加1开始。类似地,当SQL Server减少文件 时,它会从文件中删除最大页码数。

                                         SQL SERVER中的数据存储

一般来说,SQL Server有三种不同的方法或技术来存储和处理数据库中的数据。使用传统的基于行的存储,数据存储在将所有列的数据组合在一起的数据行中。

SQL Server 2012引入了列存储索引和基于列的存储。该技术存储数据是按每列而不是按行存储。我们将在本书的第七部分介绍基于列的存储。

最后,在SQL Server 2014中引入了一组内存技术,并在SQL Server 2016中进行了进一步的改进。尽管出于冗余的目的,它们将数据保存在磁盘上,但是它们的存储格式与基于行和基于列的存储都非常不同。我们将在本书第八部分讨论内存技术。

本书的这一部分主要介绍基于行的存储和经典的B-树索引和堆。

图1-6显示了数据页面的结构。

图1-6数据页结构

一个96字节的页眉包含信息页面的各个部分,如对象页面的所属的行数和页面上可用的空闲空间容量,如果页面在索引页链中,则链接到前一页和后一页,等等。

页面后面是存储实际数据的区域。然后是空闲空间。最后,还有一个位置数组,它是一个由两个字节的条目组成的块,表示页面上相应数据行开始的偏移量。

位置数组指示页面上数据行的逻辑顺序。如果需要按照索引键的顺序对页面上的数据进行排序,SQL Server不会对页面上的数据行进行物理排序,而是根据索引排序顺序填充位置数组。位置0(图1-6中最右边)存储页面上键值最低的数据行的偏移量、位置1、第二低键值,等等。我们将在下一章节更深入地讨论索引。

SQL Server提供了一组丰富的系统数据类型,如int、datetime char和其他类型,无论它们的值是什么,总是使用相同数量的存储空间,即使它是空的也是如此。例如,int列总是使用4个字节,nchar(10)列总是使用20个字节来存储信息。

相反,可变长的数据类型,如varchar、varbinary和其他一些类型,使用的存储空间与存储数据所需的存储空间一样多,另外还有两个额外的字节。例如,一个nvarchar(4000)列只使用12个字节来存储一个5个字符的字符串,在大多数情况下,使用2个字节来存储一个空值。稍后我们将在本章节讨论可变长列不为空值使用存储空间的情况。

让我们看看数据行的结构,如图1-7所示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值