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