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 базы данных База данных AdventureWorks2008R2.

USE AdventureWorks2008R2; 
GO
DBCC DBREINDEX ("HumanResources.Employee", PK_Employee_BusinessEntityID,80);
GO

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

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

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