Compartilhar via


DBCC DBREINDEX (Transact-SQL)

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

Recria um ou mais índices de uma tabela no banco de dados especificado.

Importante

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Use ALTER INDEX nesse caso.

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

table_name

O nome da tabela que contém os índices especificados a serem recompilados. Os nomes de tabela precisam seguir as regras para identificadores.

index_name

O nome do índice a ser recompilado. Os nomes de índice devem obedecer às regras para identificadores. Se index_name for especificado, table_name precisará ser especificado. Se index_name não for especificado ou for ' ', todos os índices da tabela serão recriados.

fillfactor

A porcentagem de espaço em cada página do índice para armazenamento de dados quando ele é criado ou recriado. fillfactor substituirá o fator de preenchimento especificado na criação do índice, tornando-se o novo padrão para ele e para qualquer outro índice não clusterizado que tenha sido recriado devido à recriação de um índice clusterizado.

Quando fillfactor for 0, DBCC DBREINDEX usará o último valor do fator de preenchimento especificado para o índice. Esse valor é armazenado na exibição de catálogo sys.indexes.

Se fillfactor for especificado, table_name e index_name precisarão ser especificados. Se fillfactor não for especificado, será usado o padrão de 100. Para obter mais informações, veja Especificar fator de preenchimento para um índice.

WITH NO_INFOMSGS

Suprime todas as mensagens informativas com níveis de severidade de 0 a 10.

Comentários

DBCC DBREINDEX recompila um índice de uma tabela ou todos os índices definidos para uma tabela. Quando você permite que um índice seja recriado dinamicamente, os índices que impõem a restrição PRIMARY KEY ou UNIQUE podem ser recriados sem a necessidade de descartar e recriar essas restrições. Isso significa que um índice pode ser recriado sem ter conhecimento da estrutura de uma tabela ou suas restrições. Isso pode ocorrer depois de uma cópia em massa de dados na tabela.

DBCC DBREINDEX pode recompilar todos os índices de uma tabela em uma instrução. Isso é mais fácil do que codificar várias instruções DROP INDEX e CREATE INDEX. Como o trabalho é realizado por uma instrução, DBCC DBREINDEX é automaticamente atômica, considerando que as instruções DROP INDEX e CREATE INDEX, individualmente, devem ser incluídas em uma transação para serem atômicas. Além disso, DBCC DBREINDEX oferece mais otimizações do que instruções DROP INDEX e CREATE INDEX individuais.

Ao contrário de DBCC INDEXDEFRAG ou de ALTER INDEX com a opção REORGANIZE, DBCC DBREINDEX é uma operação offline. Se um índice não clusterizado estiver sendo recriado, um bloqueio compartilhado será mantido na tabela em questão durante a operação. Isso impede que sejam efetuadas modificações na tabela. Se o índice clusterizado estiver sendo recriado, um bloqueio de tabela exclusivo será mantido. Isso impede qualquer acesso à tabela, deixando-a, dessa forma, offline. Para executar uma recompilação de índice online ou controlar o grau de paralelismo durante a operação de recompilação do índice, use a instrução ALTER INDEX REBUILD com a opção ONLINE.

Para saber como selecionar um método a fim de recompilar ou reorganizar um índice, confira Reorganizar e recompilar índices.

Restrições

DBCC DBREINDEX não tem suporte para uso nos seguintes objetos:

  • Tabelas do sistema
  • Índices espaciais
  • Índices columnstore com otimização de memória

Conjuntos de resultados

A menos que NO_INFOMSGS seja especificado (o nome de tabela deve ser especificado), DBCC DBREINDEX sempre retornará o seguinte:

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

Permissões

O chamador precisa ser o proprietário da tabela ou ser membro da função de servidor fixa sysadmin, da função de banco de dados fixa db_owner ou da função de banco de dados fixa db_ddladmin.

Exemplos

a. Recompilar um índice

O exemplo a seguir recria o índice clusterizado Employee_EmployeeID com um fator de preenchimento de 80 na tabela Employee no banco de dados AdventureWorks2022.

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

B. Recompilar todos os índices

O exemplo a seguir recria todos os índices da tabela Employee no AdventureWorks2022 usando um valor de fator de preenchimento de 70.

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

Confira também