不知道如何正确调用标题。但是,我试图了解数据页的存储方式。我创建了简单的表:
CREATE TABLE testFix
(
id INT,
v CHAR(10)
);
INSERT INTO dbo.testFix
(
id,
v
)
VALUES
( 1, -- id - int
'asdasd' -- v - varchar(100)
)
GO 2
DBCC TRACEON(3604);
然后我通过以下命令获得了 PageFID 和 PagePID:
DBCC IND(tempdb, testFix, -1)
GO
然后是实际的数据页:
DBCC PAGE (tempdb, 1, 368, 3)
所以现在我看到了:
插槽 0 偏移量 0x60 长度 21
记录类型 = PRIMARY_RECORD 记录属性 = NULL_BITMAP
记录大小 = 21内存转储@0x000000287DD7A060
0000000000000000: 10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014: 00
.插槽 0 列 1 偏移量 0x4 长度 4 长度(物理) 4
编号 = 1
插槽 0 列 2 偏移量 0x8 长度 10 长度(物理) 10
v = asdasd
插槽 1 偏移量 0x75 长度 21
记录类型 = PRIMARY_RECORD 记录属性 = NULL_BITMAP
记录大小 = 21内存转储@0x000000287DD7A075
0000000000000000: 10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014: 00
.插槽 1 列 1 偏移量 0x4 长度 4 长度(物理) 4
编号 = 1
插槽 1 列 2 偏移量 0x8 长度 10 长度(物理) 10
v = asdasd
插槽 2 偏移量 0x8a 长度 21
记录类型 = PRIMARY_RECORD 记录属性 = NULL_BITMAP
记录大小 = 21内存转储@0x000000287DD7A08A
0000000000000000: 10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014: 00
所以记录的长度是 21 字节。但是 INT 是 4 个字节,而 CHAR(10) 是 10 个字节。4+10=14。其他 7 个字节的用途是什么?