Microsoft SQL Server数据存储:行记录多7字节原因及学习资源咨询
额外7字节开销的来源
SQL Server的定长数据行存在固定的7字节系统开销,结构如下:
- 2字节:记录状态标记位,用于标识记录类型、是否包含LOB字段、是否有行版本标记等属性
- 2字节:定长数据区结束偏移量,用于快速定位定长字段的存储边界
- 2字节:当前记录包含的总列数
- 1字节:NULL位图,每一位对应一个列是否为NULL,你的表共3个列,不足8位所以仅占用1字节
四部分开销总和为7字节,加上你计算的字段本身的54字节,刚好等于DBCC返回的61字节记录长度,该开销是所有定长记录的固定系统占用,和你选择的字段类型无关,所以测试int、bigint等类型都会出现该现象。
推荐学习资源
- 《SQL Server技术内幕》系列存储引擎分册,对SQL Server底层存储逻辑的讲解非常系统,包含完整的页结构、区管理、记录组织、索引存储的详细拆解,还有大量可复现的测试案例
- SQL Server官方文档的存储引擎进阶内容,可重点查阅「行存储架构」、「数据页结构」、
DBCC PAGE命令用法相关的章节 - 实操练习:你可以搭配
DBCC IND、DBCC PAGE、sys.dm_db_database_page_allocations等系统命令和视图,手动查看测试表的数据页二进制内容、存储分配情况,对照理论内容加深理解
内容的提问来源于stack exchange,提问作者An.on
相关产品推荐
相关产品推荐

