DBCC DBREINDEX (Transact-SQL)

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

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

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

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Значок ссылки на раздел Cинтаксические обозначения в 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 не поддерживается для следующих объектов:

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

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

  • индексы columnstore, оптимизированные для памяти xVelocity

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

Даже если не задан 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 AdventureWorks2012; 
GO
DBCC DBREINDEX ('HumanResources.Employee', PK_Employee_BusinessEntityID,80);
GO

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

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

USE AdventureWorks2012; 
GO
DBCC DBREINDEX ('HumanResources.Employee', ' ', 70);
GO

См. также

Справочник

ALTER TABLE (Transact-SQL)

CREATE TABLE (SQL Server)

DBCC (Transact-SQL)

sys.indexes (Transact-SQL)

sys.dm_db_index_physical_stats (Transact-SQL)

ALTER INDEX (Transact-SQL)