2014-09-29 71 views
0

我试图调查到的每个索引页面的数量,并制定了以下查询:SQL Server 2008的:在一个索引的网页数量

SELECT    
     pyi.index_type_desc as [index type], 
     i.name as [index name], 
     sum(pyi.page_count) as [number of pages] 
FROM 
    sys.dm_db_index_physical_stats(DB_ID('testdb'),OBJECT_ID('surrogatekeys'),NULL,NULL,'DETAILED') as pyi 
INNER JOIN 
    sys.indexes as i ON pyi.object_id = i.object_id  
GROUP BY 
    i.name, pyi.index_type_desc 

当我运行此查询,我得到以下结果:

CLUSTERED INDEX PK_TableWithSurrogateKeyAndUniqueContraints 14342 
CLUSTERED INDEX UNIQUE_TableWithSurrogateKeyAndUniqueContraints 14342 
NONCLUSTERED INDEX PK_TableWithSurrogateKeyAndUniqueContraints 707 
NONCLUSTERED INDEX UNIQUE_TableWithSurrogateKeyAndUniqueContraints 707 

此表的创建如下:

CREATE TABLE [dbo].[SurrogateKeys] 
(
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [TimeStamp] [datetime2](7) NOT NULL, 
    [Username] [nvarchar](20) NOT NULL, 
    [Message] [nvarchar](500) NULL, 

    CONSTRAINT [PK_TableWithSurrogateKeyAndUniqueContraints] 
     PRIMARY KEY CLUSTERED ([Id]), 
    CONSTRAINT [UNIQUE_TableWithSurrogateKeyAndUniqueContraints] 
     UNIQUE ([Username], [TimeStamp]), 
) ON [PRIMARY] 
GO 

,并拥有10万行Ø填充f随机数据。

我期望看到两个条目:唯一约束的非聚集索引和主键列的聚集索引。

这些双项是什么意思?

回答

1

这意味着你得到了JOIN条件错了 - 你还需要包括index_idJOIN状态 - 就像这样:

INNER JOIN 
    sys.indexes as i ON pyi.object_id = i.object_id 
         AND pyi.index_id = i.index_id 
+0

这做到了感谢。 – 2014-09-29 13:36:24

+0

一个简单的问题,也许是一个愚蠢的问题:如果来自sys.dm_db_index_physical_stats的第一个查询返回6行,为什么连接只返回4行?我会期待它返回不完整连接中的所有6行。 – 2014-09-29 13:51:18