【问题标题】:SQL Server 2008: number of pages in an indexSQL Server 2008:索引中的页数
【发布时间】:2014-09-29 13:17:10
【问题描述】:

我正在尝试调查每个索引的页数,并制定了以下查询:

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

并填充了 100,000 行随机数据。

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

这些重复条目是什么意思?

【问题讨论】:

    标签: sql-server-2008 indexing b-tree-index


    【解决方案1】:

    这意味着您的 JOIN 条件错误 - 您还需要在您的 JOIN 条件中包含 index_id - 像这样:

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

    【讨论】:

    • 一个简单的问题,也许是一个愚蠢的问题:如果来自 sys.dm_db_index_physical_stats 的第一个查询返回 6 行,为什么连接只返回 4 行?我原以为它会在不完整的连接中返回所有 6 行。
    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 2011-10-02
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多