HEAP中可以包含多少行数据页?

时间:2019-04-16 08:00:28

标签: sql-server

众所周知,页面的大小总是恰好为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

为什么要创建两页而不是一页?

0 个答案:

没有答案