SQLServer是如何存储数据的呢?

2023-02-17 00:00:00 数据 记录 更多 偏移 长度

 SQL Server用8KB 的页来存储数据,SQL Server 读取或写入都是以为单位。

     如果想提高查询性能,可以减少SQL Server指定查询所需页的读取

     就像吃披萨一样,如果想一口吃到更多的馅,就让馅都集中在一块饼上。同样,如果你想一次取到更多的数据,就让一页上集中更多的数据。


      那么数据是如何在页里面存放的呢?

      一个数据页总是由三个部分组成:

      1.页头(Page Header)

      2.数据区(Payload)

      3.行偏移数组(Row Offset Array)

      如图:

      


页头:始终是96 byte(不受页的类型约束),这里存储着像Page ID,Object ID等页的大体信息。这个长度是固定的。

 数据区数据以槽的方式存储。数据记录的大长度是 8060 bytes(包括 7 bytes的系统行开销),因此一条记录中你拥有的大字节数是 8053bytes

例如:(下图中创建了maxsize表,一行的记录的长度就是8000+54=8054个字节,创建时就报错,因为还有7bytes的系统行开销,所以总长度就是8061,超过了大长度8060)

  行偏移数组:行偏移数组的大小其实并不固定,如果数据区每条记录长度小,页里就可以存储更多的记录,行偏移表也会自下而上占用更多的空间。

 

   那如果我们要了解一个表具体被分配到哪些页里?


   使用非文档的命令DBCC IND


   如果想了解表如何在页里进行分布的?

  

   读取数据页结构的命令DBCC Page。


本文来源https://www.modb.pro/db/61019

相关文章