DBCC DBREINDEX (Transact-SQL)DBCC DBREINDEX (Transact-SQL)

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions)

Перестраивает один или более индексов для таблицы в указанной базе данных.Rebuilds one or more indexes for a table in the specified database.

Важно!

В будущей версии Microsoft SQL Server этот компонент будет удален.This feature will be removed in a future version of Microsoft SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Используйте вместо этого инструкцию ALTER INDEX.Use ALTER INDEX instead.

Применимо к: SQL ServerSQL ServerSQL Server 2008SQL Server 2008 до текущей версии)Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through current version)

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

DBCC DBREINDEX   
(   
    table_name   
    [ , index_name [ , fillfactor ] ]  
)  
    [ WITH NO_INFOMSGS ]   

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

АргументыArguments

table_nametable_name
Имя таблицы, содержащей указанный индекс или индексы для перестроения.Is the name of the table containing the specified index or indexes to rebuild. Имена таблиц должны соответствовать правилам для идентификаторов .Table names must follow the rules for identifiers.

index_nameindex_name
Имя перестраиваемого индекса.Is the name of the index to rebuild. Имена индексов должны соответствовать правилам для идентификаторов.Index names must comply with the rules for identifiers. Если аргумент index_name задан, также должен быть указан аргумент table_name.If index_name is specified, table_name must be specified. Если аргумент index_name не задан или имеет значение " ", перестраиваются все индексы таблицы.If index_name is not specified or is " ", all indexes for the table are rebuilt.

fillfactorfillfactor
Процентная доля пространства на каждой странице индексов при создании или перестроении индекса.Is the percentage of space on each index page for storing data when the index is created or rebuilt. Аргумент fillfactor заменяет коэффициент заполнения, указанный при создании индекса, и становится новым значением по умолчанию для данного индекса и любых других некластеризованных индексов, перестраиваемых из-за перестроения кластеризованного индекса.fillfactor replaces the fill factor when the index was created, becoming the new default for the index and for any other nonclustered indexes rebuilt because a clustered index is rebuilt.
Если значение аргумента fillfactor равно 0, в инструкции DBCC DBREINDEX используется последнее указанное значение коэффициента заполнения для индекса.When fillfactor is 0, DBCC DBREINDEX uses the fill factor value last specified for the index. Это значение хранится в представлении каталога sys.indexes.This value is stored in the sys.indexes catalog view.
Если аргумент fillfactor задан, также должны быть указаны аргументы table_name и index_name.If fillfactor is specified, table_name and index_name must be specified. Если аргумент fillfactor не задан, используется установленный по умолчанию коэффициент заполнения 100.If fillfactor is not specified, the default fill factor, 100, is used. Дополнительные сведения см. в статье Указание коэффициента заполнения для индекса.For more information, see Specify Fill Factor for an Index.

WITH NO_INFOMSGSWITH NO_INFOMSGS
Подавляет все информационные сообщения со степенями серьезности от 0 до 10.Suppresses all informational messages that have severity levels from 0 through 10.

RemarksRemarks

Инструкция DBCC DBREINDEX выполняет перестроение индекса для таблицы или всех индексов, определенных для таблицы.DBCC DBREINDEX rebuilds an index for a table or all indexes defined for a table. При разрешенном динамическом перестроении индекса индексы с ограничениями PRIMARY KEY или UNIQUE можно перестраивать без необходимости удаления и повторного создания этих ограничений.By allowing an index to be rebuilt dynamically, indexes enforcing either PRIMARY KEY or UNIQUE constraints can be rebuilt without having to drop and re-create those constraints. Это значит, что индекс может быть перестроен без необходимости знания структуры таблицы или ее ограничений.This means that an index can be rebuilt without knowing the structure of a table or its constraints. Потребность в этом может возникнуть после массового копирования данных в таблицу.This might occur after a bulk copy of data into the table.

Инструкция DBCC DBREINDEX позволяет перестроить все индексы таблицы с помощью одной инструкции.DBCC DBREINDEX can rebuild all the indexes for a table in one statement. Это проще, чем кодирование множества инструкций DROP INDEX и CREATE INDEX.This is easier than coding multiple DROP INDEX and CREATE INDEX statements. Так как работа выполняется одной инструкцией, инструкция DBCC DBREINDEX автоматически становится атомарной, в то время как отдельные инструкции DROP INDEX и CREATE INDEX необходимо включить в транзакцию, чтобы они стали атомарными.Because the work is performed by one statement, DBCC DBREINDEX is automatically atomic, whereas individual DROP INDEX and CREATE INDEX statements must be included in a transaction to be atomic. Кроме того, инструкция DBCC DBREINDEX дает большее преимущество в оптимизации по сравнению с отдельными инструкциями DROP INDEX и CREATE INDEX.Also, DBCC DBREINDEX offers more optimizations than individual DROP INDEX and CREATE INDEX statements.

В отличие от инструкций DBCC INDEXDEFRAG или от ALTER INDEX с параметром REORGANIZE, DBCC DBREINDEX является операцией вне сети.Unlike DBCC INDEXDEFRAG, or ALTER INDEX with the REORGANIZE option, DBCC DBREINDEX is an offline operation. Если перестраивается некластеризованный индекс, для запрашиваемой таблицы в течение операции удерживается совместная блокировка.If a nonclustered index is being rebuilt, a shared lock is held on the table in question for the duration of the operation. Это предотвращает изменения в таблице.This prevents modifications to the table. Если перестраивается кластеризованный индекс, удерживается монопольная блокировка таблицы.If the clustered index is being rebuilt, an exclusive table lock is held. Это предотвращает какой-либо доступ к таблице, делая ее вне сети.This prevents any table access, therefore effectively making the table offline. Для оперативного перестроения индекса используется инструкция ALTER INDEX REBUILD с параметром ONLINE; она также используется для управления степенью параллелизма в течение операции перестроения индекса.To perform an index rebuild online, or to control the degree of parallelism during the index rebuild operation, use the ALTER INDEX REBUILD statement with the ONLINE option.

Дополнительные сведения о выборе метода перестроения или реорганизации индекса см. в статье Реорганизация и перестроение индексов.For more information about selecting a method to rebuild or reorganize an index, see Reorganize and Rebuild Indexes .

ОграниченияRestrictions

Использование инструкции DBCC DBREINDEX не поддерживается для следующих объектов:DBCC DBREINDEX is not supported for use on the following objects:

  • Системные таблицыSystem tables
  • Пространственные индексыSpatial indexes
  • индексы columnstore, оптимизированные для памяти xVelocityxVelocity memory optimized columnstore indexes

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

Даже если не задан NO_INFOMSGS (имя таблицы задавать необходимо), инструкция DBCC DBREINDEX возвращает:Unless NO_INFOMSGS is specified (the table name must be specified), DBCC DBREINDEX always returns:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.  

РазрешенияPermissions

Вызывающий должен быть владельцем таблицы, членом предопределенной роли сервера sysadmin, предопределенной роли базы данных db_owner или предопределенной роли базы данных db_ddladmin.Caller must own the table, or be a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role.

ПримерыExamples

A.A. Перестроение индексаRebuilding an index

В следующем примере перестраивается кластеризованный индекс Employee_EmployeeID с коэффициентом заполнения 80 для таблицы Employee базы данных AdventureWorks.The following example rebuilds the Employee_EmployeeID clustered index with a fill factor of 80 on the Employee table in the AdventureWorks database.

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

Б.B. Перестроение всех индексовRebuilding all indexes

В следующем примере перестраиваются все индексы для таблицы Employee базы данных AdventureWorks при значении коэффициента заполнения 70.The following example rebuilds all indexes on the Employee table in AdventureWorks by using a fill factor value of 70.

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

См. также:See Also

ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)DBCC (Transact-SQL)
sys.indexes (Transact-SQL)sys.indexes (Transact-SQL)
sys.dm_db_index_physical_stats (Transact-SQL)sys.dm_db_index_physical_stats (Transact-SQL)
ALTER INDEX (Transact-SQL)ALTER INDEX (Transact-SQL)