DBCC DBREINDEX (Transact-SQL)

Перестраивает один или более индексов для таблицы в указанной базе данных.

Важное примечаниеВажно!

В следующей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Используйте вместо этого инструкцию ALTER INDEX.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

DBCC DBREINDEX 
( 
    table_name 
    [ , index_name [ , fillfactor ] ]
)
    [ WITH NO_INFOMSGS ] 

Аргументы

  • table_name
    Имя таблицы, содержащей указанный индекс или индексы, которые нужно перестроить. Имена таблиц должны соответствовать правилам для идентификаторов.

  • index_name
    Имя перестраиваемого индекса. Имена индексов должны соответствовать правилам для идентификаторов. Если указан аргумент index_name, необходимо также задать аргумент table_name. Если аргумент index_name не указан или имеет значение " ", перестраиваются все индексы данной таблицы.

  • fillfactor
    Процент пространства на каждой из страниц индекса, используемый для хранения данных при создании или перестроении индекса. Аргумент fillfactor заменяет коэффициент заполнения, указанный при создании индекса, и становится новым значением по умолчанию для данного индекса и любых других некластеризованных индексов, перестраиваемых из-за перестроения кластеризованного индекса. Если значение аргумента fillfactor равно 0, в инструкции DBCC DBREINDEX используется последнее указанное значение коэффициента заполнения для индекса. Это значение хранится в представлении каталога sys.indexes.

    Если указан аргумент fillfactor, необходимо также задать аргументы table_name и index_name. Если аргумент fillfactor не задан, используется установленный по умолчанию коэффициент заполнения 100. Дополнительные сведения см. в разделе Коэффициент заполнения.

  • WITH NO_INFOMSGS
    Подавляет все информационные сообщения с уровнями серьезности от 0 до 10.

Замечания

Инструкция DBCC DBREINDEX выполняет перестроение индекса для таблицы или всех индексов, определенных для таблицы. При разрешенном динамическом перестроении индекса индексы с ограничениями PRIMARY KEY или UNIQUE можно перестраивать без необходимости удаления и повторного создания этих ограничений. Это значит, что индекс может быть перестроен без знания структуры таблицы или ее ограничений. Потребность в этом может возникнуть после массового копирования данных в таблицу.

Инструкция DBCC DBREINDEX позволяет перестроить все индексы таблицы с помощью одной инструкции. Это проще, чем кодирование множества инструкций DROP INDEX и CREATE INDEX. Так как работа выполняется одной инструкцией, инструкция DBCC DBREINDEX автоматически становится атомарной, в то время как отдельные инструкции DROP INDEX и CREATE INDEX необходимо включить в транзакцию, чтобы они стали атомарными. Кроме того, инструкция DBCC DBREINDEX обеспечивает более глубокую оптимизацию по сравнению с отдельными инструкциями DROP INDEX и CREATE INDEX.

В отличие от инструкций DBCC INDEXDEFRAG или от ALTER INDEX с параметром REORGANIZE, DBCC DBREINDEX является автономной операцией. Если перестраивается некластеризованный индекс, для запрашиваемой таблицы в течение операции удерживается совместная блокировка. Это предотвращает изменения в таблице. Если перестраивается кластеризованный индекс, удерживается монопольная блокировка таблицы. Это предотвращает какой-либо доступ к таблице, делая ее автономной. Чтобы оперативно перестроить индекс или управлять степенью параллелизма во время операции перестроения индекса, используется инструкция ALTER INDEX REBUILD с параметром ONLINE.

Дополнительные сведения о выборе метода перестроения или реорганизации индекса см. в разделе Реорганизация и перестроение индексов.

Ограничения

Использование инструкции DBCC DBREINDEX не поддерживается для следующих объектов:

  • Системные таблицы

  • Пространственные индексы

Результирующие наборы

Если указан любой из параметров, кроме NO_INFOMSGS (имя таблицы необходимо указать), инструкция DBCC DBREINDEX всегда возвращает следующее:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Разрешения

Участник должен быть владельцем таблицы, членом предопределенной роли сервера sysadmin, предопределенной роли базы данных db_owner или предопределенной роли базы данных db_ddladmin.

Примеры

А. Перестроение индекса

В следующем примере перестраивается кластеризованный индекс Employee_EmployeeID с коэффициентом заполнения 80 для таблицы Employee базы данных AdventureWorks.

USE AdventureWorks; 
GO
DBCC DBREINDEX ("HumanResources.Employee", PK_Employee_EmployeeID,80);
GO

Б. Перестроение всех индексов

В следующем примере перестраиваются все индексы для таблицы Employee базы данных AdventureWorks при значении коэффициента заполнения 70.

USE AdventureWorks; 
GO
DBCC DBREINDEX ("HumanResources.Employee", " ", 70);
GO