Почему таблица sys.indexes имеет имя индекса NULL? - PullRequest
6 голосов
/ 12 февраля 2010

Я запустил этот запрос:

SELECT
    i.name                  AS IndexName,
    s.used_page_count * 8   AS IndexSizeKB
FROM sys.dm_db_partition_stats  AS s 
JOIN sys.indexes                AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
WHERE s.[object_id] = object_id('dbo.Stu')
ORDER BY i.name

и самый большой возвращаемый индекс имел имя NULL. Что это значит?

Ответы [ 3 ]

11 голосов
/ 12 февраля 2010

С sys.indexes :

Название индекса ...
NULL = куча

Так что это куча.

5 голосов
/ 12 февраля 2010

Представление sys.indexes показывает не только индексы, но и таблицы, в которых нет индексов. Такие таблицы называются кучами. В таком случае имя индекса отсутствует. Это может вводить в заблуждение, я согласен.

SELECT i.object_id, i.type_desc,
    i.name                  AS IndexName,
    s.used_page_count * 8   AS IndexSizeKB
FROM sys.dm_db_partition_stats  AS s 
JOIN sys.indexes                AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
WHERE s.[object_id] = object_id('dbo.Stu')
ORDER BY i.object_id, i.name

По сути, если отправленный вами запрос возвращает имя индекса NULL, это означает, что в вашей таблице нет кластерного индекса dbo.Stu.

Я бы рекомендовал создать кластерный индекс для таблицы.

2 голосов
/ 14 мая 2014

Важное дополнение к ответам выше: Имя индекса в представлении каталога sys.indexes может быть ПУСТО (NULL) в ДВУХ случаях:

1) Как указано в MSDN, если это действительно куча, то есть таблица не имеет кластеризованного индекса. Для каждой непроверенной таблицы в представлении sys.indexes есть одна такая запись (даже если таблица имеет другие некластеризованные индексы).

2) Если это статистика (MSDN удивительно об этом молчит!). По крайней мере, я наблюдал такое условие на одной из моих баз данных на сервере SQL 2008 R2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...