Обновление статистики стратегии после операции по поддержанию индекса - PullRequest
1 голос
/ 19 января 2012

Поскольку Index Rebuilds будет обновлять статистические данные для соответствующих индексов при полном сканировании, поэтому не рекомендуется обновлять статистику по этим индексам, используя обновление статистики с размером выборки по умолчанию. Это ухудшит данные статистики. В этом случае, когда мы выполняем операцию обновления статистики для всех таблиц в базе данных, является ли правильной стратегией исключение тех индексов из процесса обновления, для которых индексы уже обновлены (исходя из предположения, что мы запуск перестроений индекса перед обновлением статистики). Например, предположим, что я использую следующий курсор для получения списка всех индексов в БД, для которых требуется обновление:

SET @index_names = CURSOR LOCAL FAST_FORWARD READ_ONLY
FOR
    SELECT NAME ,indid ,rowmodctr
    FROM sys.sysindexes
        WHERE id = @table_id
        AND indid > 0
    ORDER BY indid

и используйте следующее условие, чтобы проверить, нужно ли нам обновлять статистику:

IF ((@ind_rowmodctr <> 0))

Но это обновит статистику для всех индексов независимо от того, обновлен ли индекс уже из-за перестройки.

Теперь, предполагая, что мы выполняем задачу «Перестроение индекса» и задачу обновления статистики в один и тот же день и в том же порядке, можем ли мы использовать следующий фильтр для удаления уже перестроенных индексов:

SELECT NAME AS index_name
    ,CONVERT(VARCHAR(10), STATS_DATE(object_id, index_id), 111) AS statistics_update_date
FROM sys.indexes
WHERE object_id = OBJECT_ID('CM_Project')
    AND CONVERT(VARCHAR(10), STATS_DATE(object_id, index_id), 111) <> CONVERT(VARCHAR(10), GETDATE(), 111)

Если это не правильный / оптимальный способ достижения этого, не могли бы вы предложить стандартный способ сделать это.

Спасибо. Soumya

...