2014-09-29 2 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 

и заполняется 100000 строк о f случайных данных.

Ожидалось увидеть две записи: некластеризованный индекс для уникального ограничения и кластерный индекс для столбца первичного ключа.

Что означают эти двойные записи?

ответ

1

Это означает, что вы получили JOIN условия неправильно - вы также должны включать index_id в вашем JOIN состоянии - как это:

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

Это сделал это спасибо. –

+0

Быстрый вопрос, возможно, глупый: почему соединение возвратило только 4 строки, если первый запрос из sys.dm_db_index_physical_stats возвращает 6 строк? Я бы ожидал, что он вернет все 6 строк в неполное соединение. –