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