DBCC DBREINDEX (Transact-SQL)
Se aplica a:SQL ServerAzure SQL Managed Instance
Vuelve a generar uno o varios índices de una tabla de la base de datos especificada.
Importante
Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Use ALTER INDEX en su lugar.
Se aplica a: SQL Server 2008 (10.0.x) y versiones posteriores.
Convenciones de sintaxis de Transact-SQL
Sintaxis
DBCC DBREINDEX
(
table_name
[ , index_name [ , fillfactor ] ]
)
[ WITH NO_INFOMSGS ]
Nota:
Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.
Argumentos
table_name
El nombre de la tabla que contiene los índices especificados que se van a volver a generar. Los nombres de las tablas deben seguir las reglas de los identificadores.
index_name
El nombre del índice que se va a volver a generar. Los nombres de los índices deben ajustarse a las reglas de los identificadores. Si se especifica index_name, debe especificarse table_name. Si index_name no se especifica o se indica como ' '
, se recompilan todos los índices de la tabla.
fillfactor
El porcentaje de espacio de cada página de índice que se usa para almacenar los datos cuando el índice se crea o se vuelve a generar. fillfactor reemplaza al factor de relleno usado al crear el índice y se convierte en el nuevo valor predeterminado para el índice y para cualquier otro índice no agrupado que se recompile como consecuencia de la recompilación de un índice agrupado.
Cuando fillfactor es 0, DBCC DBREINDEX
usa el último valor del factor de relleno que se ha especificado para el índice. Este valor se almacena en la vista de catálogo sys.indexes
.
Si se especifica fillfactor, debe especificarse table_name e index_name. Si no se especifica fillfactor, se usa el factor de relleno predeterminado (100). Para obtener más información, vea Especificar el factor de relleno para un índice.
WITH NO_INFOMSGS
Suprime todos los mensajes informativos con niveles de gravedad entre 0 y 10.
Observaciones
DBCC DBREINDEX
vuelve a generar un índice de una tabla o todos los índices definidos de una tabla. Al permitir que los índices se vuelvan a generar dinámicamente, los índices que implementen restricciones PRIMARY KEY o UNIQUE se pueden volver a generar sin tener que quitar y volver a crear las restricciones. Esto significa que un índice puede volver a generarse sin conocer la estructura de una tabla ni sus restricciones. Esto puede suceder después de copiar datos de forma masiva en la tabla.
DBCC DBREINDEX
puede volver a generar todos los índices para una tabla en una instrucción. Esto es más sencillo que programar varias instrucciones DROP INDEX
y CREATE INDEX
. Como todo el trabajo se hace con una instrucción, DBCC DBREINDEX
es, automáticamente, una acción atómica, mientras que, para ser atómicas, las instrucciones DROP INDEX
y CREATE INDEX
individuales deben formar parte de una transacción. Además, DBCC DBREINDEX
ofrece más optimización que las instrucciones individuales DROP INDEX
y CREATE INDEX
.
A diferencia de DBCC INDEXDEFRAG
, o ALTER INDEX
con la opción REORGANIZE
, DBCC DBREINDEX
es una operación sin conexión. Si se vuelve a generar un índice no clúster, se mantiene un bloqueo compartido en la tabla en cuestión durante la operación. Esto evita que se modifique la tabla. Si el índice clúster se vuelve a generar, se mantiene un bloqueo de tabla exclusivo. Así se evita cualquier acceso a la tabla, haciendo que la tabla esté sin conexión. Use la instrucción ALTER INDEX REBUILD
con la opción ONLINE
para volver a agregar un índice en línea o para controlar el grado de paralelismo durante la operación de regeneración del índice.
Para más información sobre cómo seleccionar un método para recompilar o reorganizar un índice, consulte Optimización del mantenimiento de índices para mejorar el rendimiento de las consultas y reducir el consumo de recursos.
Restricciones
DBCC DBREINDEX
no se admite para su uso en los objetos siguientes:
- Tablas del sistema
- Índices espaciales
- índices de almacén de columnas optimizados para memoria
Conjuntos de resultados
A menos que se especifique NO_INFOMSGS
(se debe especificar el nombre de la tabla), DBCC DBREINDEX
siempre devuelve lo siguiente:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Permisos
El autor de la llamada debe ser el propietario de la tabla, o bien un miembro del rol fijo de servidor sysadmin o de los roles fijos de base de datos db_owner o db_ddladmin.
Ejemplos
A. Volver a generar un índice
En este ejemplo se vuelve a generar el índice clúster Employee_EmployeeID
con un factor de relleno de 80
en la tabla Employee
de la base de datos AdventureWorks2022
.
USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', PK_Employee_BusinessEntityID, 80);
GO
B. Recompilación de todos los índices
En este ejemplo se vuelven a generar todos los índices de la tabla Employee
de AdventureWorks2022
con un valor de factor de relleno de 70
.
USE AdventureWorks2022;
GO
DBCC DBREINDEX ('HumanResources.Employee', ' ', 70);
GO