Deshabilitar índices

Al deshabilitar un índice, se impide que el usuario pueda tener acceso al mismo y, en el caso de los índices agrupados, a los datos de la tabla subyacente. La definición del índice se conserva en los metadatos, y las estadísticas de índice se mantienen en índices no agrupados. Al deshabilitar un índice no agrupado o agrupado en una vista, se eliminan físicamente los datos del índice. Deshabilitar un índice agrupado en una tabla, impide el acceso a los datos, que siguen en la tabla pero dejan de estar disponibles para operaciones DML hasta que se quite o vuelva a generar el índice. Utilice las instrucciones ALTER INDEX REBUILD o CREATE INDEX WITH DROP_EXISTING para volver a generar y habilitar un índice deshabilitado.

En las siguientes circunstancias, pueden deshabilitarse uno o varios índices:

  • SQL Server Database Engine (Motor de base de datos de SQL Server) deshabilita automáticamente el índice durante una actualización de SQL Server.

  • Al deshabilitar manualmente el índice mediante ALTER INDEX.

La actualización de SQL Server deshabilita un índice

Durante la actualización a una nueva versión o Service Pack de SQL Server, el Motor de base de datos identifica y deshabilita de forma automática los índices, incluidos los índices en vistas, siempre que el índice o la definición de la vista contengan uno de los siguientes elementos:

  • Una expresión para la cual el Motor de base de datos ya no pueda garantizar la integridad de los datos del índice.

    Sería el caso, por ejemplo, de un índice que utiliza una función del sistema que se hubiera cambiado durante la actualización de modo que devolviera un resultado distinto. El Motor de base de datos deshabilitará el índice durante la actualización, puesto que puede contener datos que dejarán de ser válidos después de la actualización.

  • Una intercalación que se haya modificado como parte de una actualización de forma que el índice haya dejado de estar ordenado correctamente.

Cuando se deshabilita un índice durante el proceso de actualización, un mensaje de advertencia muestra el nombre del índice y los nombres de las restricciones asociadas para que el usuario pueda volver a generarlos una vez terminada la actualización. Al volver a generar el índice y habilitar las restricciones, se corrigen los datos invalidados durante la actualización.

Es posible que se deshabiliten una restricción CHECK si la definición contiene una expresión para la que el Motor de base de datos ya no pueda garantizar la integridad de los datos. Para habilitar la restricción, utilice la instrucción ALTER TABLE CHECK.

Usar ALTER INDEX para deshabilitar un índice

Los índices se pueden deshabilitar manualmente en cualquier momento mediante la instrucción ALTER INDEX DISABLE.

Nota

Si una tabla se encuentra en una publicación de replicación transaccional, no puede deshabilitar ningún índice que esté asociado con las columnas de clave principal. Estos índices son necesarios para la replicación. Para deshabilitar un índice, primero debe quitar la tabla de la publicación. Para obtener más información, vea Publicar datos y objetos de base de datos.

Es posible que desee deshabilitar un índice para llevar a cabo lo siguiente:

  • Corregir un error de E/S de disco (error 823 o 824) de una página de índice y luego volver a generar el índice.

  • Eliminar temporalmente el índice para solucionar problemas.

  • Volver a generar índices no agrupados.

    Al deshabilitar un índice no agrupado, la operación para volver a generarlo requiere suficiente espacio en disco temporal para almacenar tanto el índice antiguo como el nuevo. Sin embargo, el hecho de deshabilitar y volver a generar el índice no agrupado en transacciones independientes, permite que el espacio en disco que queda disponible al deshabilitar el índice pueda volver a usarse para la siguiente operación de volver a generarlo o para cualquier otra operación. No se necesita espacio adicional, salvo el espacio en disco temporal para la ordenación, que suele ser un 20 por ciento del tamaño del índice.

    Si el espacio en disco es limitado, puede resultar útil deshabilitar el índice no agrupado antes de volver a generarlo. Sería el caso, por ejemplo, de un procedimiento almacenado que volviera a generar todos los índices no agrupados en una o varias tablas. El hecho de deshabilitar los índices en primer lugar en una transacción independiente de la operación de regeneración, permite reducir de forma considerable el espacio en disco temporal necesario para su regeneración.

Para deshabilitar un índice

ALTER INDEX (Transact-SQL)

Cómo reconstruir un índice (SQL Server Management Studio)