Я проходил курс MS10775A на прошлой неделе, и возник вопрос, на который тренер не смог ответить надежно:
Обновляет ли реиндекс статистику?
Мы нашли обсуждения в Интернете, утверждая, что это так, а что нет.
Я проходил курс MS10775A на прошлой неделе, и возник вопрос, на который тренер не смог ответить надежно:
Обновляет ли реиндекс статистику?
Мы нашли обсуждения в Интернете, утверждая, что это так, а что нет.
REINDEX
обновляет статистику столбцов как побочный эффект перестройки индекса - вам не нужно обновлять статистику. Данные в таблице не меняются. Это те же самые данные, это только а) перемещение его местоположения на вращающемся блюде (когда страница реорганизуется), или б) размещение на другой странице (в случае перестроения). Итак: повторный индекс делает (некоторые) обновление статистики: нет необходимости делать это.Ответы:
Когда вы заботитесь об обновлении статистики, вы можете помнить следующее (скопировано из « Перестроение индексов против обновления статистики» (Бенджамин Неварез)
По умолчанию
UPDATE STATISTICS
оператор использует только образец записей таблицы. ИспользованиеUPDATE STATISTICS WITH FULLSCAN
будет сканировать всю таблицу.По умолчанию
UPDATE STATISTICS
оператор обновляет статистику индекса и столбца. Использование этойCOLUMNS
опции будет обновлять только статистику столбцов. Использование этойINDEX
опции будет обновлять только статистику индекса.Перестройка индекса , например, с использованием
ALTER INDEX … REBUILD
, также обновит статистику индекса с использованием эквивалента использования,WITH FULLSCAN
если таблица не секционирована, и в этом случае статистика выбирается только (применяется к SQL Server 2012 и более поздним версиям).Статистические данные, которые были созданы вручную
CREATE STATISTICS
, не обновляются никакимиALTER INDEX ... REBUILD
операциями, в том числеALTER TABLE ... REBUILD
.ALTER TABLE ... REBUILD
обновляет статистику для кластеризованного индекса, если он определен в перестраиваемой таблице.Реорганизация индекса , например использование
ALTER INDEX … REORGANIZE
, не обновляет статистику.Краткий ответ: вам нужно использовать
UPDATE STATISTICS
для обновления статистики столбцов, а перестройка индекса будет обновлять только статистику индекса. Вы можете принудительно обновить всю статистику в таблице, включая индексную статистику и статистику, созданную вручную, с помощьюUPDATE STATISTICS (tablename) WITH FULLSCAN;
синтаксиса.Следующий код иллюстрирует правила, инкапсулированные выше:
Сначала мы создадим таблицу с парой столбцов и кластеризованным индексом:
Этот запрос показывает дату последнего обновления каждого объекта статистики:
Результаты показывают, что обновления еще не произошли, и это правильно, так как мы только что создали таблицу:
Давайте перестроим всю таблицу и посмотрим, обновит ли она статистику:
Результаты показывают, что только статистика кластеризованного индекса была обновлена.
Далее мы выполняем дискретную
UPDATE STATS
операцию:Как видите, мы только что обновили статистику по
d
столбцу:Теперь мы обновим статистику по всей таблице:
Как видите, единственный способ убедиться, что все статистические данные обновлены, это либо обновить каждую статистику вручную, либо обновить всю таблицу с помощью
UPDATE STATISTICS (table);
.источник
ALTER INDEX ... REBUILD
либоUPDATE STATISTICS
оператора. Если сама таблица перестроена, обновляется только статистика кластерного индекса. К вашему сведению, первичный ключ и кластерный индекс не обязательно поддерживаются одним и тем же объектом индекса.Страница документов Microsoft для статистики SQL Server гласит :
источник