分析SQL Server中的数据结构

时间:2016-04-03 19:48:50

标签: sql-server sql-server-2012

我很难理解为什么在分析行结构时我会在下面获得多个条目。

首先,我设置了两个表。

我正在使用以下查询深入研究Row / Page结构。

CREATE TABLE [Table1]
(
    [Column1] INT IDENTITY PRIMARY KEY,
    [Column2] VARCHAR (100),
    [Column3] VARCHAR (20)
)

CREATE TABLE [Table2]
(
    [Column1] INT IDENTITY 
        FOREIGN KEY REFERENCES [Table1]([Column1]),
    [Column4] VARCHAR (1000)
)

然后,我使用以下

插入100万行
BEGIN TRANSACTION

INSERT INTO [Table1] ([Column2], [Column3])
VALUES (REPLICATE ('2', 50), REPLICATE('3', 20))

INSERT INTO [Table2] ([Column4])
VALUES (REPLICATE ('4', 1000))
GO 1000000

COMMIT TRANSACTION

然后,使用以下查询,我尝试查看表格中有多少页面。

SELECT
    [alloc_unit_type_desc] AS [Data Structure],
    [page_count] AS [pages],
    [record_count] AS [Rows]
FROM 
    SYS.dm_db_index_physical_stats (DB_id(), OBJECT_ID (N'Table1'), NULL, NULL, N'detailed')

以下是我的问题:其他41页来自哪里?当他们显然不包含相同的数据?我也没有在选择表上看到它们。

1 个答案:

答案 0 :(得分:4)

如果您在查询中添加index_level,则会看到

SELECT [alloc_unit_type_desc] AS [Data Structure],
       [page_count]           AS [pages],
       [record_count]         AS [Rows],
       index_level
FROM   sys.dm_db_index_physical_stats (DB_id(), 
                 OBJECT_ID (N'Table1'), NULL, NULL, N'detailed') 

enter image description here

使用主键创建表。默认情况下,这将是聚集索引。支持此功能的B-tree索引有一个根页面,在根目录和级别为0的11,112个叶级别页面之间有40个中间页面。

(聚集索引的结构from here

enter link description here