Поделиться через


DBCC DBREINDEX (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

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

Внимание

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

Область применения: SQL Server 2008 (10.0.x) и более поздних версий.

Соглашения о синтаксисе 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, оптимизированные для памяти

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

Если 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 базы данных AdventureWorks2022.

USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', PK_Employee_BusinessEntityID, 80);
GO

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

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

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

См. также