Как мне найти индексы, у которых statistics_norecompute = ON - PullRequest
7 голосов
/ 02 июня 2011

Я ищу запрос SQL Server 2005, в котором будут перечислены все индексы и указано соответствующее значение STATISTICS_NORECOMPUTE.Я не видел никакого очевидного значения в sysindexes, которое соответствует этому значению.

Ответы [ 3 ]

8 голосов
/ 02 июня 2011

Столбец no_recompute в sys.stats , в котором указано

Каждый индекс будет иметь соответствующую строку статистики с тем же именем и идентификатором (sys.indexes.object_id = sys.stats.object_id AND sys.indexes.index_id = sys.stats.stats_id), но не каждая строка статистики имеет соответствующий индекс.

Таким образом, JOIN между sys.indexes и sys.stats будет соответствовать индексу для вас

Причина:

  • статистика может быть для столбцов или индексов
  • индекс имеет ровно одну статистику.
  • STATISTICS_NORECOMPUTE применяется к статистике для этого индекса, а не к самому индексу
4 голосов
/ 14 февраля 2014

Вы можете использовать этот запрос:

select TableName = so.name, 
       IndexName = si.name, 
       StatName = s.name, 
       s.no_recompute
  from sys.indexes si
           inner join sys.stats s on si.object_id = s.object_id
           inner join sys.objects so on si.object_id = so.object_id
  where     no_recompute = 0
        and so.[type] in ('U', 'V')
order by so.name, si.name, s.name
0 голосов
/ 05 мая 2019

Запрос DoubleJ мне кажется неправильным. Вы можете использовать этот запрос для поиска индексов без повторных вычислений:

SELECT 
    OBJECT_NAME(i.object_id) AS table_name,
    i.name AS index_name,
    s.name
FROM
    sys.indexes AS i
    LEFT JOIN sys.stats AS s
    ON i.index_id = s.stats_id
    AND i.object_id = s.object_id
WHERE
    s.no_recompute = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...