Habilitar índices y restriccionesEnable Indexes and Constraints

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL DatabaseSe aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

En este tema se describe cómo habilitar un índice deshabilitado en SQL Server 2019 (15.x)SQL Server 2019 (15.x) mediante SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to enable a disabled index in SQL Server 2019 (15.x)SQL Server 2019 (15.x) by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Cuando se deshabilita un índice, sigue deshabilitado hasta que se vuelve a generar o se quita.After an index is disabled, it remains in a disabled state until it is rebuilt or dropped

En este temaIn This Topic

Antes de comenzarBefore You Begin

Limitaciones y restriccionesLimitations and Restrictions

  • Después de volver a generar el índice, deben volver a habilitarse manualmente las restricciones deshabilitadas debido a la deshabilitación del índice.After rebuilding the index, any constraints that were disabled because of disabling the index must be manually enabled. Las restricciones PRIMARY KEY y UNIQUE se habilitan cuando se regenera el índice asociado.PRIMARY KEY and UNIQUE constraints are enabled by rebuilding the associated index. Este índice debe volver a generarse (habilitarse) para poder habilitar las restricciones FOREIGN KEY que hacen referencia a la restricción PRIMARY KEY o UNIQUE.This index must be rebuilt (enabled) before you can enable FOREIGN KEY constraints that reference the PRIMARY KEY or UNIQUE constraint. Las restricciones FOREIGN KEY se habilitan con la instrucción ALTER TABLE CHECK CONSTRAINT.FOREIGN KEY constraints are enabled by using the ALTER TABLE CHECK CONSTRAINT statement.

  • No es posible volver a generar un índice clúster deshabilitado si la opción ONLINE está establecida en ON.Rebuilding a disabled clustered index cannot be performed when the ONLINE option is set to 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.When the clustered index is disabled or enabled and the nonclustered index is disabled, the clustered index action has the following results on the disabled nonclustered index.

    Acción del índice clústerClustered Index Action Índice no agrupado deshabilitado ...Disabled Nonclustered Index ...
    ALTER INDEX REBUILD.ALTER INDEX REBUILD. Sigue deshabilitado.Remains disabled.
    ALTER INDEX ALL REBUILD.ALTER INDEX ALL REBUILD. Se vuelve a generar y se habilita.Is rebuilt and enabled.
    DROP INDEX.DROP INDEX. Sigue deshabilitado.Remains disabled.
    CREATE INDEX WITH DROP_EXISTING.CREATE INDEX WITH DROP_EXISTING. Sigue deshabilitado.Remains disabled.

    La creación de un índice clúster se comporta igual que ALTER INDEX ALL REBUILD.Creating a new clustered index, behaves the same as 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.Allowed actions on nonclustered indexes associated with a clustered index depend on the state, whether disabled or enabled, of both index types. La tabla siguiente resume las acciones permitidas en índices no clúster.The following table summarizes the allowed actions on nonclustered indexes.

    Acción del índice no clústerNonclustered Index Action Cuando los índices clúster y no clúster están deshabilitados.When both the clustered and nonclustered indexes are disabled. Cuando el índice clúster está habilitado y el índice no clúster está deshabilitado o habilitado.When the clustered index is enabled and the nonclustered index is in either state.
    ALTER INDEX REBUILD.ALTER INDEX REBUILD. Se produce un error en la acción.The action fails. La acción se realiza correctamente.The action succeeds.
    DROP INDEX.DROP INDEX. La acción se realiza correctamente.The action succeeds. La acción se realiza correctamente.The action succeeds.
    CREATE INDEX WITH DROP_EXISTING.CREATE INDEX WITH DROP_EXISTING. Se produce un error en la acción.The action fails. La acción se realiza correctamente.The action succeeds.
  • Al recompilar índices no agrupados comprimidos y deshabilitados, el valor predeterminado de data_compression es "none". Por tanto, los índices se descomprimirán.When rebuilding disabled compressed nonclustered indexes, data_compression will default to 'none', meaning that indexes will be uncompressed. Esto se debe a que los metadatos de configuración de compresión se pierden al deshabilitar los índices no agrupados.This is due to compression settings metadata is lost when nonclustered indexes are disabled. Para resolverlo, debe especificar una compresión de datos explícita en la instrucción de recompilación.To work around this you must specify explicit data compression in rebuild statement.

SeguridadSecurity

PermisosPermissions

Requiere el permiso ALTER en la tabla o la vista.Requires ALTER permission on the table or view. Si se usa DBCC DBREINDEX, el usuario debe ser el propietario de la tabla o debe ser miembro del rol fijo de servidor sysadmin o de los roles fijos de base de datos db_ddladmin y db_owner.If using DBCC DBREINDEX, user must either own the table; or be a member of the sysadmin fixed server role; or the db_ddladmin and db_owner fixed database roles.

Uso de SQL Server Management StudioUsing SQL Server Management Studio

Para habilitar un índice deshabilitadoTo enable a disabled index

  1. En el Explorador de objetos, haga clic en el signo más para expandir la base de datos que contiene la tabla en la que desea habilitar un índice.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to enable an index.

  2. Haga clic en el signo más para expandir la carpeta Tablas .Click the plus sign to expand the Tables folder.

  3. Haga clic en el signo más para expandir la tabla en la que desea habilitar un índice.Click the plus sign to expand the table on which you want to enable an index.

  4. Haga clic en el signo más para expandir la carpeta Índices .Click the plus sign to expand the Indexes folder.

  5. Haga clic con el botón derecho en el índice que quiera habilitar y seleccione Volver a generar.Right-click the index you want to enable and select Rebuild.

  6. En el cuadro de diálogo Volver a generar índices , compruebe que el índice correcto se encuentra en la cuadrícula Índices que se volverán a generar y haga clic en Aceptar.In the Rebuild Indexes dialog box, verify that the correct index is in the Indexes to rebuild grid and click OK.

Para habilitar todos los índices de una tablaTo enable all indexes on a table

  1. En el Explorador de objetos, haga clic en el signo más para expandir la base de datos que contiene la tabla en la que desea habilitar los índices.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to enable the indexes.

  2. Haga clic en el signo más para expandir la carpeta Tablas .Click the plus sign to expand the Tables folder.

  3. Haga clic en el signo más para expandir la tabla en la que desea habilitar los índices.Click the plus sign to expand the table on which you want to enable the indexes.

  4. Haga clic con el botón derecho en la carpeta Índices y seleccione Volver a generar todo.Right-click the Indexes folder and select Rebuild All.

  5. En el cuadro de diálogo Volver a generar índices , compruebe que los índices correctos se encuentran en la cuadrícula Índices que se volverán a generar y haga clic en Aceptar.In the Rebuild Indexes dialog box, verify that the correct indexes are in the Indexes to rebuild grid and click OK. 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.To remove an index from the Indexes to rebuild grid, select the index and then press the Delete key.

La siguiente información está disponible en el cuadro de diálogo Volver a generar índices :The following information is available in the Rebuild Indexes dialog box:

Usar Transact-SQLUsing Transact-SQL

Para habilitar un índice deshabilitado mediante ALTER INDEXTo enable a disabled index using ALTER INDEX

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datosDatabase Engine.In Object Explorer, connect to an instance of Motor de base de datosDatabase Engine.

  2. En la barra de Estándar, haga clic en Nueva consulta.On the Standard bar, click New Query.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- Enables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table.  
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    REBUILD;   
    GO  
    

Para habilitar un índice deshabilitado mediante CREATE INDEXTo enable a disabled index using CREATE INDEX

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datosDatabase Engine.In Object Explorer, connect to an instance of Motor de base de datosDatabase Engine.

  2. En la barra de Estándar, haga clic en Nueva consulta.On the Standard bar, click New Query.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- re-creates the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    -- using the OrganizationLevel and OrganizationNode columns  
    -- and then deletes the existing IX_Employee_OrganizationLevel_OrganizationNode index  
    CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
       (OrganizationLevel, OrganizationNode)  
    WITH (DROP_EXISTING = ON);  
    GO  
    

Para habilitar un índice deshabilitado mediante DBCC DBREINDEXTo enable a disabled index using DBCC DBREINDEX

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datosDatabase Engine.In Object Explorer, connect to an instance of Motor de base de datosDatabase Engine.

  2. En la barra de Estándar, haga clic en Nueva consulta.On the Standard bar, click New Query.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;   
    GO  
    -- enables the IX_Employee_OrganizationLevel_OrganizationNode index  
    -- on the HumanResources.Employee table  
    DBCC DBREINDEX ("HumanResources.Employee", IX_Employee_OrganizationLevel_OrganizationNode);  
    GO  
    

Para habilitar todos los índices de una tabla mediante ALTER INDEXTo enable all indexes on a table using ALTER INDEX

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datosDatabase Engine.In Object Explorer, connect to an instance of Motor de base de datosDatabase Engine.

  2. En la barra de Estándar, haga clic en Nueva consulta.On the Standard bar, click New Query.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    GO  
    -- enables all indexes  
    -- on the HumanResources.Employee table  
    ALTER INDEX ALL ON HumanResources.Employee  
    REBUILD;  
    GO  
    

Para habilitar todos los índices de una tabla mediante DBCC DBREINDEXTo enable all indexes on a table using DBCC DBREINDEX

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datosDatabase Engine.In Object Explorer, connect to an instance of Motor de base de datosDatabase Engine.

  2. En la barra de Estándar, haga clic en Nueva consulta.On the Standard bar, click New Query.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;   
    GO  
    -- enables all indexes  
    -- on the HumanResources.Employee table  
    DBCC DBREINDEX ("HumanResources.Employee", " ");  
    GO  
    

Para obtener más información, vea ALTER INDEX (Transact-SQL), CREATE INDEX (Transact-SQL), y DBCC DBREINDEX (Transact-SQL).For more information, see ALTER INDEX (Transact-SQL), CREATE INDEX (Transact-SQL), and DBCC DBREINDEX (Transact-SQL).