Requisitos de espacio en disco para operaciones DDL de índiceDisk Space Requirements for Index DDL Operations

SE APLICA A: síSQL Server noAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

El espacio en disco es una consideración importante a la hora de crear, volver a generar o quitar índices.Disk space is an important consideration when you create, rebuild, or drop indexes. Un espacio en disco inadecuado puede degradar el rendimiento e incluso provocar errores en las operaciones de índice.Inadequate disk space can degrade performance or even cause the index operation to fail. En este tema se proporciona información general que puede ayudar a determinar la cantidad de espacio necesario para las operaciones de lenguaje de definición de datos (DDL).This topic provides general information that can help you determine the amount of disk space required for index data definition language (DDL) operations.

Operaciones de índice que no requieren espacio en disco adicionalIndex Operations That Require No Additional Disk Space

Las siguientes operaciones de índice no requieren espacio en disco adicional:The following index operations require no additional disk space:

  • ALTER INDEX REORGANIZE; sin embargo, se requiere espacio de registro.ALTER INDEX REORGANIZE; however, log space is required.

  • DROP INDEX cuando se quita un índice no clúster.DROP INDEX when you are dropping a nonclustered index.

  • DROP INDEX cuando se quita un índice clúster sin conexión sin especificar la cláusula MOVE TO y no existen índices no clúster.DROP INDEX when you are dropping a clustered index offline without specifying the MOVE TO clause and nonclustered indexes do not exist.

  • CREATE TABLE (restricciones PRIMARY KEY o UNIQUE).CREATE TABLE (PRIMARY KEY or UNIQUE constraints)

Operaciones de índice que requieren espacio en disco adicionalIndex Operations That Require Additional Disk Space

Todas las demás operaciones DDL de índice requieren espacio temporal en disco adicional para utilizarlo durante la operación y espacio en disco permanente para almacenar la estructura (o estructuras) del nuevo índice.All other index DDL operations require additional temporary disk space to use during the operation, and permanent disk space to store the new index structure or structures.

Cuando se crea una nueva estructura de índice, se requiere espacio en disco para ambas estructuras, la antigua (origen) y la nueva (destino), en los archivos y grupos de archivos correspondientes.When a new index structure is created, disk space for both the old (source) and new (target) structures is required in their appropriate files and filegroups. La asignación de la estructura antigua no se cancela hasta que no se confirma la transacción de creación del índice.The old structure is not deallocated until the index creation transaction commits.

Las siguientes operaciones DDL de índice crean estructuras y requieren espacio en disco adicional:The following index DDL operations create new index structures and require additional disk space:

  • CREATE INDEXCREATE INDEX

  • CREATE INDEX WITH DROP_EXISTINGCREATE INDEX WITH DROP_EXISTING

  • ALTER INDEX REBUILDALTER INDEX REBUILD

  • ALTER TABLE ADD CONSTRAINT (PRIMARY KEY o UNIQUE)ALTER TABLE ADD CONSTRAINT (PRIMARY KEY or UNIQUE)

  • ALTER TABLE DROP CONSTRAINT (PRIMARY KEY o UNIQUE) cuando la restricción se basa en un índice clústerALTER TABLE DROP CONSTRAINT (PRIMARY KEY or UNIQUE) when the constraint is based on a clustered index

  • DROP INDEX MOVE TO (se aplica solo a ndices clúster)DROP INDEX MOVE TO (Applies only to clustered indexes.)

Espacio temporal en disco para ordenaciónTemporary Disk Space for Sorting

Además del espacio en disco necesario para las estructuras de origen y destino, se necesita espacio temporal en disco para la ordenación, a menos que el optimizador de consultas busque un plan de ejecución que no requiera ordenación.Besides the disk space required for the source and target structures, temporary disk space is required for sorting, unless the query optimizer finds an execution plan that does not require sorting.

Si se requiere ordenación, ésta se produce en un nuevo índice a la vez.If sorting is required, sorting occurs one new index at a time. Por ejemplo, cuando se vuelve a generar un índice clúster con los índices no clúster que van asociados en una instrucción única, los índices se ordenan uno tras otro.For example, when you rebuild a clustered index and associated nonclustered indexes within a single statement, the indexes are sorted one after the other. Por lo tanto, el espacio temporal en disco que se necesita para ordenar solo tiene que ser tan grande como el índice más grande de la operación.Therefore, the additional temporary disk space that is required for sorting only has to be as large as the largest index in the operation. Éste casi siempre se corresponde con el índice clúster.This is almost always the clustered index.

Si la opción SORT_IN_TEMPDB está establecida en ON, el índice más grande debe caber en tempdb.If the SORT_IN_TEMPDB option is set to ON, the largest index must fit into tempdb. Aunque esta opción aumenta la cantidad de espacio temporal en disco utilizado para crear un índice, puede reducir el tiempo necesario para crear el índice cuando tempdb se encuentra en un conjunto de discos diferente al de la base de datos de usuario.Although this option increases the amount of temporary disk space that is used to create an index, it may reduce the time that is required to create an index when tempdb is on a set of disks different from the user database.

Si SORT_IN_TEMPDB está establecido en OFF (el valor predeterminado), cada índice, incluidos los índices con particiones, se ordena en su espacio en disco de destino y solo se necesita espacio en disco para las nuevas estructuras de índice.If SORT_IN_TEMPDB is set to OFF (the default) each index, including partitioned indexes, is sorted in its destination disk space; and only the disk space for the new index structures is required.

Para obtener un ejemplo de cálculo de espacio en disco, vea Index Disk Space Example.For an example of calculating disk space, see Index Disk Space Example.

Espacio temporal en disco para operaciones de índice en líneaTemporary Disk Space for Online Index Operations

Cuando se realizan operaciones de índice en línea, se necesita espacio temporal en disco adicional.When you perform index operations online, additional temporary disk space is required.

Cuando se crea un índice clúster, se vuelve a generar o se quita en línea, se crea un índice no clúster temporal para asignar los antiguos marcadores a los nuevos.If a clustered index is created, rebuilt, or dropped online, a temporary nonclustered index is created to map old bookmarks to new bookmarks. Si la opción SORT_IN_TEMPDB está establecida en ON, el índice temporal se crea en tempdb.If the SORT_IN_TEMPDB option is set to ON, this temporary index is created in tempdb. Si SORT_IN_TEMPDB está establecida en OFF, se utiliza el mismo grupo de archivos o esquema de particiones que el índice de destino.If SORT_IN_TEMPDB is set to OFF, the same filegroup or partition scheme as the target index is used. El índice de asignación temporal contiene un registro para cada fila de la tabla y su contenido es la unión de las columnas de marcadores antiguos y nuevos, que incluye los identificadores únicos y los identificadores de registro, y solo una copia única de cualquier columna que se utilice en ambos marcadores.The temporary mapping index contains one record for each row in the table, and its contents is the union of the old and new bookmark columns, including uniqueifiers and record identifiers and including only a single copy of any column used in both bookmarks. Para obtener más información sobre las operaciones de índices en línea, vea Realizar operaciones de índice en línea.For more information about online index operations, see Perform Index Operations Online.

Nota

La opción SORT_IN_TEMPDB no se puede establecer para instrucciones DROP INDEX.The SORT_IN_TEMPDB option cannot be set for DROP INDEX statements. El índice de asignación temporal se crea siempre en el mismo grupo de archivos o esquema de particiones que el índice de destino.The temporary mapping index is always created in the same filegroup or partition scheme as the target index.

Las operaciones de índice en línea utilizan versiones de fila para aislar la operación de índice de los efectos de modificaciones efectuadas por otras transacciones.Online index operations use row versioning to isolate the index operation from the effects of modifications made by other transactions. Así se evita la necesidad de solicitar que se compartan bloqueos en filas que se han leído.This avoids the need for requesting share locks on rows that have been read. Las operaciones simultáneas de eliminación y actualización de usuarios durante las operaciones de índice en línea requieren espacio para registros de versión en tempdb.Concurrent user update and delete operations during online index operations require space for version records in tempdb. Para obtener más información, vea Realizar operaciones de índice en línea .For more information, see Perform Index Operations Online .

Index Disk Space ExampleIndex Disk Space Example

Espacio en disco del registro de transacciones para operaciones de índiceTransaction Log Disk Space for Index Operations

Calcular el tamaño de una tablaEstimate the Size of a Table

Estimar el tamaño de un índice clústerEstimate the Size of a Clustered Index

Estimar el tamaño de un índice no clústerEstimate the Size of a Nonclustered Index

Estimar el tamaño de un montónEstimate the Size of a Heap

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

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

DROP INDEX (Transact-SQL)DROP INDEX (Transact-SQL)

Especificar el factor de relleno para un índiceSpecify Fill Factor for an Index

Reorganizar y volver a generar índicesReorganize and Rebuild Indexes