DBCC DBREINDEX (Transact-SQL)
Перестраивает один или более индексов для таблицы в указанной базе данных.
Важно! |
---|
В следующей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Используйте вместо этого инструкцию ALTER INDEX. |
Синтаксис
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