众所周知,页面的大小总是恰好为8 KB(8192字节),包含两个主要部分,即页眉和正文。标题的固定大小为96个字节,并且无论页面类型如何,标题和内容的格式都相同。
我有一个包含两个int数据类型列的表:
IF OBJECT_ID('t1', 'U') IS NOT NULL
DROP TABLE t1;
CREATE TABLE t1 ( C1 INT
,C2 INT)
在t1中插入477行:
;WITH cte AS
(
SELECT 1 AS ValueFor_C1
,1 AS ValueFor_C2
UNION ALL
SELECT ValueFor_C1 + 1
,ValueFor_C2 + 1
FROM cte
WHERE ValueFor_C1 < 477
)
INSERT INTO t1
SELECT *
FROM cte
OPTION (MAXRECURSION 0)
4字节+ 4字节= 8字节一个行大小。 (477行* 8字节)+ 92字节= 3908字节的表大小。
8192字节-3908字节= 4284字节剩余的可用空间。
但是page_count显示数据需要两页:
SELECT i.name,
i.type_desc,
s.page_count,
s.record_count,
s.index_level
FROM sys.indexes i
JOIN sys.dm_db_index_physical_stats(DB_ID(N'AdventureWorks2012'),
OBJECT_ID(N'dbo.t1'),
NULL,
NULL,
'DETAILED') AS s
ON i.index_id = s.index_id
WHERE i.object_id = OBJECT_ID(N'dbo.t1');
name type_desc page_count record_count index_level
NULL HEAP 2 477 0
为什么要创建两页而不是一页?