Directrices para realizar operaciones de índice en línea

Actualizado: 14 de abril de 2006

Al realizar operaciones de índice en línea se aplican las siguientes directrices:

  • Los índices agrupados deben estar sin conexión para crearse, reconstruirse o quitarse cuando la tabla subyacente contenga tipos de datos de objetos grandes (LOB): image, ntext, text, varchar(max), nvarchar(max), varbinary(max) y xml.
  • Los índices no agrupados que no son únicos se pueden crear en línea cuando la tabla contiene tipos de datos LOB, pero ninguna de estas columnas se utiliza en la definición del índice como columna de clave o sin clave (incluida). Los índices no agrupados definidos con las columnas de tipos de datos LOB se deben crear o reconstruir sin conexión.
  • Los índices de tablas temporales locales no se pueden crear, reconstruir o quitar en línea. Esta restricción no se aplica a los índices de tablas temporales globales.

[!NOTA] Las operaciones de índices en línea únicamente pueden realizarse en Microsoft SQL Server 2005 Enterprise Edition.

En la siguiente tabla se muestran operaciones de índice que se pueden llevar a cabo estando en línea y los índices que se excluyen de esas operaciones en línea. También se incluyen restricciones adicionales.

Operación de índice en línea Índices excluidos Otras restricciones

ALTER INDEX REBUILD

Índice agrupado deshabilitado o vista indizada deshabilitada

Índice XML

Índice de una tabla temporal local

Si se especifica la palabra clave ALL la operación puede ser errónea si la tabla contiene un índice excluido.

Se aplican restricciones adicionales para reconstruir índices deshabilitados. Para obtener más información, vea Directrices para deshabilitar índices.

CREATE INDEX

Índice XML

Índice agrupado único inicial en una vista

Índice de una tabla temporal local

 

CREATE INDEX WITH DROP_EXISTING

Índice agrupado deshabilitado o vista indizada deshabilitada

Índice de una tabla temporal local

Índice XML

 

DROP INDEX

Índice deshabilitado

Índice XML

Índice no agrupado

Índice de una tabla temporal local

No se pueden especificar varios índices en una única instrucción.

ALTER TABLE ADD CONSTRAINT (PRIMARY KEY o UNIQUE)

Índice de una tabla temporal local

Índice agrupado

Sólo se permite una subcláusula cada vez. Por ejemplo, no puede agregar y quitar restricciones PRIMARY KEY o UNIQUE en la misma instrucción ALTER TABLE.

ALTER TABLE DROP CONSTRAINT (PRIMARY KEY o UNIQUE)

Índice agrupado

 

La tabla subyacente no se puede modificar, truncar o quitar mientras se está llevando a cabo una operación de índice en línea.

La configuración de opción en línea (ON u OFF) especificada al crear o quitar un índice agrupado se aplica a índices no agrupados que se deben reconstruir. Por ejemplo, si el índice agrupado se genera en línea utilizando CREATE INDEX WITH DROP_EXISTING, ONLINE=ON, todos los índices no agrupados asociados se vuelven a crear en línea también.

Cuando crea o reconstruye un índice UNIQUE en línea, el generador de índices y una transacción de usuario simultánea pueden intentar insertar la misma clave, infringiendo su unicidad. Si una fila especificada por un usuario se inserta en el nuevo índice (destino) antes de que la fila original de la tabla de origen se mueva al nuevo índice, se producirá un error en la operación de índice en línea.

Aunque no es común, la operación de índice en línea puede causar un interbloqueo cuando interactúa con las actualizaciones de la base de datos debido a las actividades de una aplicación o de un usuario. En esos casos poco comunes, el SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) seleccionará el usuario o la actividad de la aplicación como sujeto de interbloqueo.

Sólo puede realizar operaciones DDL de índice en línea simultáneas en la misma tabla o vista cuando crea varios índices no agrupados o reorganiza índices no agrupados. Se producirá un error en todas las operaciones de índice en línea que se realizan al mismo momento. Por ejemplo, no puede crear un índice en línea mientras reconstruye un índice en línea existente en la misma tabla.

Consideraciones acerca del espacio en disco

Normalmente, los requisitos de espacio en disco son los mismos para operaciones de índice en línea y sin conexión. Una excepción es el espacio en disco adicional que necesita el índice de asignación temporal. Este índice temporal se utiliza en operaciones de índice en línea que crean, reconstruyen o quitan un índice agrupado. Para quitar un índice agrupado en línea se requiere tanto espacio como para crearlo. Para obtener más información, vea Requisitos de espacio en disco para operaciones DDL de índice.

Consideraciones de rendimiento

Aunque las operaciones de índice en línea permiten actividades de actualización de usuario simultáneas, las operaciones de índice tardan más si la actividad de actualización es muy grande. Normalmente, las operaciones de índice en línea son más lentas que las operaciones de índice sin conexión equivalentes, independientemente del nivel de actividad de actualización simultánea.

Como las estructuras de origen y de destino se mantienen durante la operación de índice en línea, el uso de recursos para insertar, actualizar y eliminar transacciones aumenta, potencialmente hasta el doble. Esto puede provocar una reducción del rendimiento y un mayor uso de los recursos, especialmente de tiempo de CPU, durante la operación de índice. Las operaciones de índice en línea se registran totalmente.

Aunque se recomiendan las operaciones en línea, se debe evaluar el entorno y los requisitos específicos. Puede ser mejor ejecutar operaciones de índice sin conexión. Al hacerlo así, los usuarios tienen acceso restringido a los datos durante la operación, pero la operación acaba más rápido y utiliza menos recursos.

En equipos multiprocesador que ejecutan SQL Server 2005 Enterprise Edition, las instrucciones de índice pueden usar más procesadores para realizar las operaciones de exploración y ordenación asociadas a la instrucción de índice, como otras consultas. Puede usar la opción de índice MAXDOP para controlar el número de procesadores dedicados a la operación de índice en línea. De este modo, puede equilibrar los recursos utilizados por la operación de índice con los de los usuarios simultáneos. Para obtener más información, vea Configurar operaciones de índice en paralelo.

Debido a que un bloqueo S o un bloqueo Sch-M se conservan en la fase final de la operación de índice, debe tener cuidado cuando ejecute una operación de índice en línea dentro de una transacción de usuario explícita, como el bloque BEGIN TRANSACTION...COMMIT. De esta manera el bloqueo se conserva hasta el final de la transacción y se impide la simultaneidad de usuarios.

Consideraciones del registro de transacciones

Las operaciones de índice a gran escala, realizadas sin conexión o en línea, pueden generar grandes cargas de datos que pueden hacer que el registro de transacciones se llene rápidamente. Para estar seguros de que la operación de índice se pueda revertir, el registro de transacciones no se puede truncar hasta que se haya completado la operación de índice; no obstante, se puede realizar una copia de seguridad del registro durante la operación de índice. Por lo tanto, el registro de transacciones debe tener suficiente espacio para almacenar las transacciones de la operación de índice y cualquier transacción de usuario simultánea durante la operación de índice. Para obtener más información, vea Espacio en disco del registro de transacciones para operaciones de índice.

Vea también

Conceptos

Cómo funcionan las operaciones de índice en línea
Realizar operaciones de índices en línea

Otros recursos

ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

14 de abril de 2006

Contenido actualizado:
  • Se quitó un índice no agrupado único de la lista de índices excluidos. Este cambio se aplica al Service Pack 1 y posteriores de SQL Server 2005.

5 de diciembre de 2005

Contenido nuevo:
  • Se agregó un índice no agrupado único a la lista de índices excluidos para estas instrucciones: CREATE INDEX, CREATE INDEX WITH DROP_EXISTING y ALTER TABLE ADD CONSTRAINT (PRIMARY KEY o UNIQUE).