Compartir a través de


Habilitación de índices y restricciones

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLBase de datos SQL en Microsoft Fabric

En este artículo se describe cómo habilitar un índice deshabilitado en SQL Server mediante SQL Server Management Studio o Transact-SQL. Cuando se deshabilita un índice, sigue deshabilitado hasta que se vuelve a generar o se quita.

Limitations

Después de volver a generar el índice, las restricciones que se deshabilitaron debido a la deshabilitación del índice deben habilitarse manualmente. Las restricciones PRIMARY KEY y UNIQUE se habilitan mediante la reconstrucción del índice asociado. Este índice tiene que ser reconstruido antes de poder habilitar las restricciones que hagan referencia a la restricción FOREIGN KEY o PRIMARY KEY. FOREIGN KEY Las restricciones se habilitan mediante la ALTER TABLE CHECK CONSTRAINT instrucción .

No se puede reconstruir un índice agrupado deshabilitado cuando la opción ONLINE está configurada en ON.

Si el índice clúster está deshabilitado o habilitado y el índice no clúster está deshabilitado, la acción del índice clúster tiene los siguientes resultados en el índice no clúster deshabilitado.

Acción del índice agrupado Estado del índice no agrupado deshabilitado
ALTER INDEX REBUILD Permanece deshabilitado
ALTER INDEX ALL REBUILD Reconstruido y habilitado
DROP INDEX Reconstruido y habilitado
CREATE INDEX WITH DROP_EXISTING Permanece deshabilitado

La creación de un nuevo índice agrupado se comporta igual que ALTER INDEX ALL REBUILD.

Las acciones permitidas en índices no clúster asociados con un índice clúster dependen del estado, deshabilitado o habilitado, de ambos tipos de índice. La tabla siguiente resume las acciones permitidas en índices no clúster.

Acción de índice no agrupado Cuando los índices agrupados y no agrupados están deshabilitados Cuando el índice clúster está habilitado y el índice no clúster está en cualquier estado
ALTER INDEX REBUILD Se produce un error en la acción La acción tiene éxito
DROP INDEX La acción tiene éxito La acción tiene éxito
CREATE INDEX WITH DROP_EXISTING Se produce un error en la acción La acción tiene éxito

Al regenerar índices no agrupados comprimidos y deshabilitados, data_compression por defecto se establece en none, lo que significa que los índices están sin comprimir. Esto se debe a que los metadatos de configuración de compresión se pierden al deshabilitar los índices no agrupados. Para solucionar este problema, debe especificar la compresión de datos explícita en la instrucción rebuild.

Permissions

Debe tener un permiso de ALTER sobre la tabla o vista. Si usa DBCC DBREINDEX, debe ser propietario de la tabla o ser miembro del rol fijo de servidor sysadmin, o miembro de uno de los roles fijos de base de datos db_ddladmin o db_owner.

Uso de SQL Server Management Studio

Habilitación de un índice deshabilitado

  1. En el Explorador de objetos, seleccione el signo más para expandir la base de datos que contiene la tabla en la que desea habilitar un índice.

  2. Selecciona el signo más para expandir la carpeta Tablas.

  3. Seleccione el signo más para expandir la tabla en la que desea habilitar un índice.

  4. Seleccione el signo más para expandir la carpeta Índices .

  5. Haga clic con el botón derecho en el índice que quiera habilitar y seleccione Volver a generar.

  6. En el cuadro de diálogo Recompilar índices , compruebe que el índice correcto está en la cuadrícula Índices para recompilar y seleccione Aceptar.

Habilitación de todos los índices de una tabla

  1. En el Explorador de objetos, seleccione el signo más para expandir la base de datos que contiene la tabla en la que desea habilitar los índices.

  2. Selecciona el signo más para expandir la carpeta Tablas.

  3. Seleccione el signo más para expandir la tabla en la que desea habilitar los índices.

  4. Haga clic con el botón derecho en la carpeta Índices y seleccione Volver a generar todo.

  5. En el cuadro de diálogo Recompilar índices , compruebe que los índices correctos están en la cuadrícula Índices para recompilar y seleccione Aceptar. Para quitar un índice de la cuadrícula Índices que se volverán a generar , seleccione el índice y, a continuación, presione la tecla SUPRIMIR.

La siguiente información está disponible en el cuadro de diálogo Volver a generar índices :

Uso de Transact-SQL

Los ejemplos de código de este artículo usan la base de datos de ejemplo de AdventureWorks2025 o AdventureWorksDW2025, que puede descargar de la página principal de Ejemplos de Microsoft SQL Server y proyectos de comunidad.

Habilitación de un índice deshabilitado mediante ALTER INDEX

Ejecute el siguiente Transact-SQL script. En este ejemplo se habilita el índice IX_Employee_OrganizationLevel_OrganizationNode en la tabla HumanResources.Employee.

USE AdventureWorks2022;
GO

ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee REBUILD;
GO

Habilitación de un índice deshabilitado mediante CREATE INDEX

Ejecute el siguiente Transact-SQL script. En este ejemplo, se recrea el índice IX_Employee_OrganizationLevel_OrganizationNode en la tabla HumanResources.Employee, utilizando las columnas OrganizationLevel y OrganizationNode, y luego se elimina el índice existente IX_Employee_OrganizationLevel_OrganizationNode.

USE AdventureWorks2022;
GO

CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode
ON HumanResources.Employee(OrganizationLevel, OrganizationNode) WITH (DROP_EXISTING = ON);
GO

Habilitación de un índice deshabilitado mediante DBCC DBREINDEX

Note

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

Ejecute el siguiente Transact-SQL script. En este ejemplo se habilita el índice IX_Employee_OrganizationLevel_OrganizationNode en la tabla HumanResources.Employee.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);
GO

Habilitación de todos los índices de una tabla mediante ALTER INDEX

Ejecute el siguiente Transact-SQL script. En este ejemplo se habilitan todos los índices de la HumanResources.Employee tabla.

USE AdventureWorks2022;
GO

ALTER INDEX ALL
ON HumanResources.Employee REBUILD;
GO

Habilitación de todos los índices de una tabla mediante DBCC DBREINDEX

Note

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

Ejecute el siguiente Transact-SQL script. En este ejemplo se habilitan todos los índices de la HumanResources.Employee tabla.

USE AdventureWorks2022;
GO

DBCC DBREINDEX ("HumanResources.Employee", " ");
GO