SQLServer是如何存储数据的呢?
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
相关文章