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

SE APLICA A: síSQL Server (a partir de 2008) síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Modifica un índice existente de una tabla o una vista (relacional o XML) mediante su deshabilitación, regeneración o reorganización, o mediante el establecimiento de sus opciones.Modifies an existing table or view index (relational or XML) by disabling, rebuilding, or reorganizing the index; or by setting options on the index.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

-- Syntax for SQL Server and Azure SQL Database
  
ALTER INDEX { index_name | ALL } ON <object>  
{  
      REBUILD {  
            [ PARTITION = ALL ] [ WITH ( <rebuild_index_option> [ ,...n ] ) ]   
          | [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_index_option> ) [ ,...n ] ]  
      }  
    | DISABLE  
    | REORGANIZE  [ PARTITION = partition_number ] [ WITH ( <reorganize_option>  ) ]  
    | SET ( <set_index_option> [ ,...n ] )   
    | RESUME [WITH (<resumable_index_options>,[...n])]
    | PAUSE
    | ABORT
}  
[ ; ]  
  
<object> ::=   
{  
    [ database_name. [ schema_name ] . | schema_name. ]   
    table_or_view_name  
}  
  
<rebuild_index_option > ::=  
{  
      PAD_INDEX = { ON | OFF }  
    | FILLFACTOR = fillfactor   
    | SORT_IN_TEMPDB = { ON | OFF }  
    | IGNORE_DUP_KEY = { ON | OFF }  
    | STATISTICS_NORECOMPUTE = { ON | OFF }  
    | STATISTICS_INCREMENTAL = { ON | OFF }  
    | ONLINE = {   
          ON [ ( <low_priority_lock_wait> ) ]   
        | OFF } 
    | RESUMABLE = { ON | OFF } 
    | MAX_DURATION = <time> [MINUTES}     
    | ALLOW_ROW_LOCKS = { ON | OFF }  
    | ALLOW_PAGE_LOCKS = { ON | OFF }  
    | MAXDOP = max_degree_of_parallelism  
    | COMPRESSION_DELAY = {0 | delay [Minutes]}  
    | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }   
        [ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]  
}  
  
<single_partition_rebuild_index_option> ::=  
{  
      SORT_IN_TEMPDB = { ON | OFF }  
    | MAXDOP = max_degree_of_parallelism  
    | RESUMABLE = { ON | OFF } 
    | MAX_DURATION = <time> [MINUTES}     
    | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE} }  
    | ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }  
}  
  
<reorganize_option>::=  
{  
       LOB_COMPACTION = { ON | OFF }  
    |  COMPRESS_ALL_ROW_GROUPS =  { ON | OFF}  
}  
  
<set_index_option>::=  
{  
      ALLOW_ROW_LOCKS = { ON | OFF }  
    | ALLOW_PAGE_LOCKS = { ON | OFF }  
    | IGNORE_DUP_KEY = { ON | OFF }  
    | STATISTICS_NORECOMPUTE = { ON | OFF }  
    | COMPRESSION_DELAY= {0 | delay [Minutes]}  
}  

<resumable_index_option> ::=
 { 
    MAXDOP = max_degree_of_parallelism
    | MAX_DURATION =<time> [MINUTES]
    | <low_priority_lock_wait>  
 }
 
<low_priority_lock_wait>::=  
{  
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,   
                          ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )  
}  

-- Syntax for SQL Data Warehouse and Parallel Data Warehouse 
  
ALTER INDEX { index_name | ALL }  
    ON   [ schema_name. ] table_name  
{  
      REBUILD {  
            [ PARTITION = ALL [ WITH ( <rebuild_index_option> ) ] ] 
          | [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_index_option> )] ] 
      }  
    | DISABLE  
    | REORGANIZE [ PARTITION = partition_number ]  
}  
[;]  

<rebuild_index_option > ::=   
{  
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
        [ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]   
}

<single_partition_rebuild_index_option > ::=   
{  
    DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }  
}  
  

ArgumentosArguments

index_nameindex_name
Es el nombre del índice.Is the name of the index. Los nombres de índice deben ser únicos en una tabla o vista, pero no es necesario que sean únicos en una base de datos.Index names must be unique within a table or view but do not have to be unique within a database. Los nombres de índice deben seguir las reglas de los identificadores.Index names must follow the rules of identifiers.

ALLALL
Especifica todos los índices asociados a la tabla o vista independientemente del tipo de índice.Specifies all indexes associated with the table or view regardless of the index type. Si se especifica ALL y uno o más índices se encuentran en un grupo de archivos sin conexión o de solo lectura o la operación especificada no está permitida en uno o más tipos de índices, se produce un error en la instrucción.Specifying ALL causes the statement to fail if one or more indexes are in an offline or read-only filegroup or the specified operation is not allowed on one or more index types. En la siguiente tabla se enumeran las operaciones de índice y los tipos de índices no permitidos.The following table lists the index operations and disallowed index types.

Usar la palabra clave ALL con esta operaciónUsing the keyword ALL with this operation Se produce un error si la tabla tiene uno o másFails if the table has one or more
REBUILD WITH ONLINE = ONREBUILD WITH ONLINE = ON Índice XMLXML index

Índice espacialSpatial index

Índice de almacén de columnas: Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x)) y SQL DatabaseSQL Database.Columnstore index: Applies to: SQL ServerSQL Server (Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x)) and SQL DatabaseSQL Database.
REBUILD PARTITION = partition_numberREBUILD PARTITION = partition_number Índice sin particiones, índice XML, índice espacial o índice deshabilitadoNonpartitioned index, XML index, spatial index, or disabled index
REORGANIZEREORGANIZE Índices que tienen ALLOW_PAGE_LOCKS establecido en OFFIndexes with ALLOW_PAGE_LOCKS set to OFF
REORGANIZE PARTITION = partition_numberREORGANIZE PARTITION = partition_number Índice sin particiones, índice XML, índice espacial o índice deshabilitadoNonpartitioned index, XML index, spatial index, or disabled index
IGNORE_DUP_KEY = ONIGNORE_DUP_KEY = ON Índice XMLXML index

Índice espacialSpatial index

Índice de almacén de columnas: Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x)) y SQL DatabaseSQL Database.Columnstore index: Applies to: SQL ServerSQL Server (Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x)) and SQL DatabaseSQL Database.
ONLINE = ONONLINE = ON Índice XMLXML index

Índice espacialSpatial index

Índice de almacén de columnas: Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x)) y SQL DatabaseSQL Database.Columnstore index: Applies to: SQL ServerSQL Server (Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x)) and SQL DatabaseSQL Database.
RESUMABLE = ONRESUMABLE = ON Índices reanudables no compatibles con la palabra clave All.Resumable indexes not supported with All keyword.

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x)) y SQL DatabaseSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and SQL DatabaseSQL Database

Advertencia

Para saber más sobre las operaciones de índices que pueden realizarse en línea, vea Directrices para operaciones de índices en línea.For more detailed information about index operations that can be performed online, see Guidelines for Online Index Operations.

Si se especifica ALL con PARTITION = partition_number, es necesario alinear todos los índices.If ALL is specified with PARTITION = partition_number, all indexes must be aligned. Esto significa que se crean particiones basadas en las funciones de partición equivalentes.This means that they are partitioned based on equivalent partition functions. Si se utiliza ALL con PARTITION, todas las particiones de índice con el mismo parámetro partition_number se vuelven a generar u organizar.Using ALL with PARTITION causes all index partitions with the same partition_number to be rebuilt or reorganized. Para obtener más información acerca de los índices con particiones, vea Partitioned Tables and Indexes.For more information about partitioned indexes, see Partitioned Tables and Indexes.

database_namedatabase_name
Es el nombre de la base de datos.Is the name of the database.

schema_nameschema_name
Es el nombre del esquema al que pertenece la tabla o la vista.Is the name of the schema to which the table or view belongs.

table_or_view_nametable_or_view_name
Es el nombre de la tabla o vista asociada al índice.Is the name of the table or view associated with the index. Para mostrar un informe de los índices en un objeto, use la vista de catálogo sys.indexes.To display a report of the indexes on an object, use the sys.indexes catalog view.

SQL DatabaseSQL Database admite el formato de nombre de tres partes database_name.[schema_name].table_or_view_name, donde database_name es la base de datos actual o database_name es tempdb y table_or_view_name empieza por #.supports the three-part name format database_name.[schema_name].table_or_view_name when the database_name is the current database or the database_name is tempdb and the table_or_view_name starts with #.

REBUILD [ WITH (<rebuild_index_option> [ ,... n]) ]REBUILD [ WITH (<rebuild_index_option> [ ,... n]) ]
Especifica que el índice se volverá a generar con unas columnas, un tipo de índice, un atributo de unicidad y un criterio de ordenación idénticos.Specifies the index will be rebuilt using the same columns, index type, uniqueness attribute, and sort order. Esta cláusula es equivalente a DBCC DBREINDEX.This clause is equivalent to DBCC DBREINDEX. REBUILD habilita un índice deshabilitado.REBUILD enables a disabled index. Cuando se regenera un índice clúster, no se vuelven a generar los índices no clúster asociados, a menos que se especifique la palabra clave ALL.Rebuilding a clustered index does not rebuild associated nonclustered indexes unless the keyword ALL is specified. Si no se especifican las opciones de índice, se aplican los valores de las opciones de índice existentes que hay almacenados en sys.indexes.If index options are not specified, the existing index option values stored in sys.indexes are applied. Para las opciones de índice cuyos valores no estén almacenados en sys.indexes, se aplica el valor predeterminado indicado en la definición del argumento de la opción.For any index option whose value is not stored in sys.indexes, the default indicated in the argument definition of the option applies.

Si se especifica ALL y la tabla base es un montón, la operación de regeneración no tiene ningún efecto sobre la tabla.If ALL is specified and the underlying table is a heap, the rebuild operation has no effect on the table. Se regeneran los índices no clúster asociados a la tabla.Any nonclustered indexes associated with the table are rebuilt.

Si el modelo de recuperación de base de datos está establecido como simple u optimizado para cargas masivas de registros, la operación de regeneración se puede registrar mínimamente.The rebuild operation can be minimally logged if the database recovery model is set to either bulk-logged or simple.

Nota

Cuando se regenera un índice XML principal, la tabla de usuario subyacente no está disponible mientras dura esta operación.When you rebuild a primary XML index, the underlying user table is unavailable for the duration of the index operation.

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x)) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x)) and SQL DatabaseSQL Database.

Para los índices de almacén de columnas, la operación de regeneración:For columnstore indexes, the rebuild operation:

  1. No usa el criterio de ordenación.Does not use the sort order.

  2. Adquiere un bloqueo exclusivo en la tabla o la partición mientras se produce la regeneración.Acquires an exclusive lock on the table or partition while the rebuild occurs. Los datos están desconectados y no disponibles durante la recompilación, aunque se use NOLOCK, RCSI o SI.The data is "offline" and unavailable during the rebuild, even when using NOLOCK, RCSI, or SI.

  3. Vuelve a comprimir todos los datos del almacén de columnas.Re-compresses all data into the columnstore. Hay dos copias del índice de almacén de columnas mientras se está produciendo la regeneración.Two copies of the columnstore index exist while the rebuild is taking place. Cuando se finaliza la recopilación, SQL ServerSQL Server elimina el índice original del almacén de columnas.When the rebuild is finished, SQL ServerSQL Server deletes the original columnstore index.

Para saber más sobre cómo volver a generar índices de almacén de columnas, vea Desfragmentación de índices de almacén de columnas.For more information about rebuilding columnstore indexes, see Columnstore indexes - defragmentation

PARTITIONPARTITION

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

Especifica que solamente se va a volver a generar o a reorganizar una partición de un índice.Specifies that only one partition of an index will be rebuilt or reorganized. No es posible especificar PARTITION si index_name no es un índice con particiones.PARTITION cannot be specified if index_name is not a partitioned index.

PARTITION = ALL vuelve a generar todas las particiones.PARTITION = ALL rebuilds all partitions.

Advertencia

La creación y regeneración de índices no alineados en una tabla con más de 1.000 particiones es posible, pero no se admite.Creating and rebuilding nonaligned indexes on a table with more than 1,000 partitions is possible, but is not supported. Si se hace, se puede degradar el rendimiento o consumir excesiva memoria durante estas operaciones.Doing so may cause degraded performance or excessive memory consumption during these operations. Se recomienda usar solo índices alineados cuando el número de particiones sea superior a 1.000.We recommend using only aligned indexes when the number of partitions exceed 1,000.

partition_numberpartition_number

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

Es el número de partición de un índice con particiones que se va a volver a generar o a reorganizar.Is the partition number of a partitioned index that is to be rebuilt or reorganized. partition_number es una expresión constante que puede hacer referencia a variables.partition_number is a constant expression that can reference variables. Estas incluyen variables o funciones de tipo definido por el usuario y funciones definidas por el usuario, pero no pueden hacer referencia a una instrucción de Transact-SQLTransact-SQL.These include user-defined type variables or functions and user-defined functions, but cannot reference a Transact-SQLTransact-SQL statement. partition_number debe existir; de lo contrario, se producirá un error en la instrucción.partition_number must exist or the statement fails.

WITH (<single_partition_rebuild_index_option>)WITH (<single_partition_rebuild_index_option>)

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

SORT_IN_TEMPDB, MAXDOP y DATA_COMPRESSION son las opciones que se pueden especificar cuando se vuelve a generar una partición única (PARTITION = n).SORT_IN_TEMPDB, MAXDOP, and DATA_COMPRESSION are the options that can be specified when you rebuild a single partition (PARTITION = n). No es posible especificar índices XML en una operación para volver a generar una partición única.XML indexes cannot be specified in a single partition rebuild operation.

DISABLEDISABLE
Marca el índice como deshabilitado y no disponible para el Motor de base de datosDatabase Engine.Marks the index as disabled and unavailable for use by the Motor de base de datosDatabase Engine. Cualquier índice puede estar deshabilitado.Any index can be disabled. La definición de índice de un índice deshabilitado se conserva en el catálogo del sistema sin datos del índice subyacente.The index definition of a disabled index remains in the system catalog with no underlying index data. La deshabilitación de un índice clúster evita que los usuarios obtengan acceso a los datos de la tabla subyacente.Disabling a clustered index prevents user access to the underlying table data. Para habilitar un índice, utilice ALTER INDEX REBUILD o CREATE INDEX WITH DROP_EXISTING.To enable an index, use ALTER INDEX REBUILD or CREATE INDEX WITH DROP_EXISTING. Para más información, vea Habilitar índices y restricciones y Deshabilitar índices y restricciones.For more information, see Disable Indexes and Constraints and Enable Indexes and Constraints.

REORGANIZE para índices de almacén de filasREORGANIZE a rowstore index
Para los índices de almacén de filas, REORGANIZE especifica que se reorganizará el nivel hoja del índice.For rowstore indexes, REORGANIZE specifies to reorganize the index leaf level. La operación REORGANIZE:The REORGANIZE operation is:

  • Siempre se realiza en línea.Always performed online. Esto significa que los bloqueos de tabla a largo plazo no se mantienen y que las consultas o actualizaciones en la tabla subyacente pueden continuar durante la transacción ALTER INDEX REORGANIZE.This means long-term blocking table locks are not held and queries or updates to the underlying table can continue during the ALTER INDEX REORGANIZE transaction.
  • No se permite para un índice deshabilitado.Not allowed for a disabled index
  • No se permite cuando ALLOW_PAGE_LOCKS está establecido en OFF.Not allowed when ALLOW_PAGE_LOCKS is set to OFF
  • No se revierte cuando se realiza como parte de una transacción y la transacción se revierte.Not rolled back when it is performed within a transaction and the transaction is rolled back.

REORGANIZE WITH ( LOB_COMPACTION = { ON | OFF } )REORGANIZE WITH ( LOB_COMPACTION = { ON | OFF } )
Se aplica a índices de almacén de filas.Applies to rowstore indexes.

LOB_COMPACTION = ONLOB_COMPACTION = ON

  • Especifica que se deben compactar todas las páginas que contienen datos de estos tipos de datos de objetos grandes (LOB): image, text, ntext, varchar(max), nvarchar(max), varbinary(max) y xml.Specifies to compact all pages that contain data of these large object (LOB) data types: image, text, ntext, varchar(max), nvarchar(max), varbinary(max), and xml. Compactar estos datos puede reducir el tamaño de los datos en disco.Compacting this data can reduce the data size on disk.

  • Para un índice agrupado, se compactan todas las columnas LOB que figuran en la tabla.For a clustered index, this compacts all LOB columns that are contained in the table.

  • Para un índice no agrupado, se compactan todas las columnas LOB que son columnas sin clave (incluidas) en el índice.For a nonclustered index, this compacts all LOB columns that are nonkey (included) columns in the index.

  • REORGANIZE ALL realiza LOB_COMPACTION en todos los índices.REORGANIZE ALL performs LOB_COMPACTION on all indexes. Para cada índice, se compactan todas las columnas LOB en el índice agrupado, la tabla subyacente o las columnas incluidas en un índice no agrupado.For each index, this compacts all LOB columns in the clustered index, underlying table, or included columns in a nonclustered index.

LOB_COMPACTION = OFFLOB_COMPACTION = OFF

  • Las páginas que contienen datos de objetos grandes no se compactan.Pages that contain large object data are not compacted.

  • OFF no tiene ningún efecto sobre un montón.OFF has no effect on a heap.

REORGANIZE para índices de almacén de columnasREORGANIZE a columnstore index
Para índices de almacén de columnas, REORGANIZE comprime cada grupo de filas delta con el estado CLOSED en el almacén de columnas como un grupo de filas comprimido.For columnstore indexes, REORGANIZE compresses each CLOSED delta rowgroup into the columnstore as a compressed rowgroup. La operación REORGANIZE siempre se efectúa en línea.The REORGANIZE operation is always performed online. Esto significa que los bloqueos de tabla a largo plazo no se mantienen y que las consultas o actualizaciones en la tabla subyacente pueden continuar durante la transacción ALTER INDEX REORGANIZE.This means long-term blocking table locks are not held and queries or updates to the underlying table can continue during the ALTER INDEX REORGANIZE transaction.

  • No es necesario usar REORGANIZE para mover grupos de filas delta con el estado CLOSED a los grupos de filas comprimidos.REORGANIZE is not required in order to move CLOSED delta rowgroups into compressed rowgroups. El proceso de motor de tupla (TM) en segundo plano se activa periódicamente para comprimir los grupos de filas delta con el estado CLOSED.The background tuple-mover (TM) process wakes up periodically to compress CLOSED delta rowgroups. Se recomienda usar REORGANIZE cuando el motor de tupla se retrase.We recommend using REORGANIZE when tuple-mover is falling behind. REORGANIZE puede comprimir grupos de filas de una forma más agresiva.REORGANIZE can compress rowgroups more aggressively.

  • Para comprimir todos los grupos de filas con los estados OPEN y CLOSED, vea la opción REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS) en esta sección.To compress all OPEN and CLOSED rowgroups, see the REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS) option in this section.

Para los índices de almacén de columnas de SQL ServerSQL Server (a partir de 2016) y SQL DatabaseSQL Database, REORGANIZE realiza estas otras optimizaciones de desfragmentación en línea:For columnstore indexes in SQL ServerSQL Server (Starting with 2016) and SQL DatabaseSQL Database, REORGANIZE performs the following additional defragmentation optimizations online:

  • Quita físicamente las filas de un grupo de filas cuando el 10 % o más de las filas se hayan eliminado lógicamente.Physically removes rows from a rowgroup when 10% or more of the rows have been logically deleted. Los bytes eliminados se reclaman en los medios físicos.The deleted bytes are reclaimed on the physical media. Por ejemplo, si en un grupo de filas comprimido que contiene un millón de filas se eliminan 100 000 filas, SQL Server quita las filas eliminadas y recomprime el grupo de filas con 900 000 filas.For example, if a compressed row group of 1 million rows has 100K rows deleted, SQL Server will remove the deleted rows and recompress the rowgroup with 900k rows. Ahorra almacenamiento mediante la eliminación de filas eliminadas.It saves on the storage by removing deleted rows.

  • Combina uno o varios grupos de filas comprimidos para aumentar las filas por grupo de filas, hasta alcanzar el máximo de 1 024 576 filas.Combines one or more compressed rowgroups to increase rows per rowgroup up to the maximum of 1,024,576 rows. Por ejemplo, si importa de forma masiva 5 lotes de 102 400 filas, obtendrá 5 grupos de filas comprimidos.For example, if you bulk import 5 batches of 102,400 rows you will get 5 compressed rowgroups. Si ejecuta REORGANIZE, estos grupos de filas se combinarán en un grupo de filas comprimido del tamaño de 512 000 filas.If you run REORGANIZE, these rowgroups will get merged into 1 compressed rowgroup of size 512,000 rows. Se supone que no había ninguna limitación de memoria o de tamaño de diccionario.This assumes there were no dictionary size or memory limitations.

  • Para los grupos de filas en los que un 10 % o más de las filas se han eliminado lógicamente, SQL Server intentará combinar este grupo de filas con uno o varios grupos de filas.For rowgroups in which 10% or more of the rows have been logically deleted, SQL Server will try to combine this rowgroup with one or more rowgroups. Por ejemplo, el grupo de filas 1 se comprimió con 500 000 filas y el grupo de filas 21 se comprimió con el máximo de 1 048 576 filas.For example, rowgroup 1 is compressed with 500,000 rows and rowgroup 21 is compressed with the maximum of 1,048,576 rows. El grupo de filas 21 tiene el 60 % de las filas eliminadas, lo que deja 409 830 filas.Rowgroup 21 has 60% of the rows deleted which leaves 409,830 rows. SQL Server favorece la opción de combinar estos dos grupos de filas para comprimir un nuevo grupo de filas que tenga 909 830 filas.SQL Server favors combining these two rowgroups to compress a new rowgroup that has 909,830 rows.

REORGANIZE WITH ( COMPRESS_ALL_ROW_GROUPS = { ON | OFF } )REORGANIZE WITH ( COMPRESS_ALL_ROW_GROUPS = { ON | OFF } )

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x)) y SQL DatabaseSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x)) and SQL DatabaseSQL Database

COMPRESS_ALL_ROW_GROUPS ofrece una manera de forzar a los grupos de filas delta con el estado OPEN o CLOSED hacia el almacén de columnas.COMPRESS_ALL_ROW_GROUPS provides a way to force OPEN or CLOSED delta rowgroups into the columnstore. Con esta opción, no es necesario regenerar el índice de almacén de columnas para vaciar los grupos de filas delta.With this option, it is not necessary to rebuild the columnstore index to empty the delta rowgroups. Al combinar esta opción con las otras características de eliminación y combinación de desfragmentación, ya no es necesario regenerar el índice en la mayoría de los casos.This, combined with the other remove and merge defragmentation features makes it no longer necessary to rebuild the index in most situations.

  • ON fuerza todos los grupos de filas del almacén de columnas, independientemente de su tamaño y estado (CLOSED u OPEN).ON forces all rowgroups into the columnstore, regardless of size and state (CLOSED or OPEN).

  • OFF fuerza todos los grupos de filas con el estado CLOSED hacia el almacén de columnas.OFF forces all CLOSED rowgroups into the columnstore.

SET ( <set_index option> [ ,... n] )SET ( <set_index option> [ ,... n] )
Especifica las opciones del índice sin volver a generar ni organizar el índice.Specifies index options without rebuilding or reorganizing the index. No es posible especificar SET para un índice deshabilitado.SET cannot be specified for a disabled index.

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

Especifica el relleno del índice.Specifies index padding. El valor predeterminado es OFF.The default is OFF.

ONON
El porcentaje de espacio disponible especificado por FILLFACTOR se aplica a páginas de nivel intermedio del índice.The percentage of free space that is specified by FILLFACTOR is applied to the intermediate-level pages of the index. Si no se especifica FILLFACTOR al mismo tiempo que PAD_INDEX se establece en ON, se usa el valor de factor de relleno almacenado en sys.indexes.If FILLFACTOR is not specified at the same time PAD_INDEX is set to ON, the fill factor value stored in sys.indexes is used.

No se especifica OFF ni fillfactor.OFF or fillfactor is not specified
Las páginas de nivel intermedio se rellenan casi al máximo.The intermediate-level pages are filled to near capacity. Esto deja suficiente espacio para al menos una fila del tamaño máximo que puede tener el índice, según el conjunto de claves de las páginas intermedias.This leaves sufficient space for at least one row of the maximum size that the index can have, based on the set of keys on the intermediate pages.

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

FILLFACTOR = fillfactorFILLFACTOR = fillfactor

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

Especifica un porcentaje que indica cuánto debe llenar el Motor de base de datosDatabase Engine el nivel hoja de cada página de índice durante la creación o modificación de los índices.Specifies a percentage that indicates how full the Motor de base de datosDatabase Engine should make the leaf level of each index page during index creation or alteration. fillfactor debe ser un valor entero comprendido entre 1 y 100.fillfactor must be an integer value from 1 to 100. El valor predeterminado es 0.The default is 0. Los valores de fill factor 0 y 100 son idénticos.Fill factor values 0 and 100 are the same in all respects.

Un valor FILLFACTOR explícito solo se aplica la primera vez que se crea o se vuelve a generar el índice.An explicit FILLFACTOR setting applies only when the index is first created or rebuilt. Motor de base de datosDatabase Engine no mantiene dinámicamente el porcentaje especificado de espacio disponible de las páginas.The Motor de base de datosDatabase Engine does not dynamically keep the specified percentage of empty space in the pages. Para obtener más información, vea CREATE INDEX (Transact-SQL).For more information, see CREATE INDEX (Transact-SQL).

Para ver el valor de factor de relleno, use sys.indexes.To view the fill factor setting, use sys.indexes.

Importante

La creación o modificación de un índice clúster con un valor FILLFACTOR afecta a la cantidad de espacio de almacenamiento que ocupan los datos, dado que el Motor de base de datosDatabase Engine vuelve a distribuir los datos cuando crea el índice clúster.Creating or altering a clustered index with a FILLFACTOR value affects the amount of storage space the data occupies, because the Motor de base de datosDatabase Engine redistributes the data when it creates the clustered index.

SORT_IN_TEMPDB = { ON | OFF }SORT_IN_TEMPDB = { ON | OFF }

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

Especifica si los resultados de ordenación se almacenan en tempdb.Specifies whether to store the sort results in tempdb. El valor predeterminado es OFF.The default is OFF.

ONON
Los resultados de ordenación intermedios utilizados para generar el índice se almacenan en tempdb.The intermediate sort results that are used to build the index are stored in tempdb. Si tempdb se encuentra en un conjunto de discos distinto al de la base de datos de usuario, se puede reducir el tiempo necesario para crear un índice.If tempdb is on a different set of disks than the user database, this may reduce the time needed to create an index. Sin embargo, esto aumenta la cantidad de espacio en disco utilizado durante la generación del índice.However, this increases the amount of disk space that is used during the index build.

OFFOFF
Los resultados de orden intermedios se almacenan en la misma base de datos que el índice.The intermediate sort results are stored in the same database as the index.

Si no se necesita una operación de ordenación o si la ordenación se puede realizar en la memoria, se omite la opción SORT_IN_TEMPDB.If a sort operation is not required, or if the sort can be performed in memory, the SORT_IN_TEMPDB option is ignored.

Para más información, vea Opción SORT_IN_TEMPDB para índices.For more information, see SORT_IN_TEMPDB Option For Indexes.

IGNORE_DUP_KEY = { ON | OFF }IGNORE_DUP_KEY = { ON | OFF }
Especifica la respuesta de error cuando una operación de inserción intenta insertar valores de clave duplicados en un índice único.Specifies the error response when an insert operation attempts to insert duplicate key values into a unique index. La opción IGNORE_DUP_KEY se aplica solamente a operaciones de inserción realizadas tras crear o volver a generar el índice.The IGNORE_DUP_KEY option applies only to insert operations after the index is created or rebuilt. El valor predeterminado es OFF.The default is OFF.

ONON
Se producirá un mensaje de advertencia cuando se inserten valores de clave duplicados en un índice único.A warning message will occur when duplicate key values are inserted into a unique index. Solo las filas que infrinjan la restricción de unicidad darán error.Only the rows violating the uniqueness constraint will fail.

OFFOFF
Se producirá un mensaje de error cuando se inserten valores de clave duplicados en un índice único.An error message will occur when duplicate key values are inserted into a unique index. Toda la operación INSERT se revertirá.The entire INSERT operation will be rolled back.

IGNORE_DUP_KEY no se puede establecer en ON para los índices creados en una vista, los índices que no sean únicos, los índices XML, los índices espaciales y los índices filtrados.IGNORE_DUP_KEY cannot be set to ON for indexes created on a view, non-unique indexes, XML indexes, spatial indexes, and filtered indexes.

Para ver IGNORE_DUP_KEY, use sys.indexes.To view IGNORE_DUP_KEY, use sys.indexes.

En la sintaxis compatible con versiones anteriores, WITH IGNORE_DUP_KEY es equivalente a WITH IGNORE_DUP_KEY = ON.In backward compatible syntax, WITH IGNORE_DUP_KEY is equivalent to WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | OFF }STATISTICS_NORECOMPUTE = { ON | OFF }
Especifica si se vuelven a calcular las estadísticas de distribución.Specifies whether distribution statistics are recomputed. El valor predeterminado es OFF.The default is OFF.

ONON
Las estadísticas obsoletas no se vuelven a calcular automáticamente.Out-of-date statistics are not automatically recomputed.

OFFOFF
Se habilita la actualización automática de las estadísticas.Automatic statistics updating are enabled.

Para restaurar la actualización automática de estadísticas, establezca STATISTICS_NORECOMPUTE en OFF o ejecute UPDATE STATISTICS sin la cláusula NORECOMPUTE.To restore automatic statistics updating, set the STATISTICS_NORECOMPUTE to OFF, or execute UPDATE STATISTICS without the NORECOMPUTE clause.

Importante

La deshabilitación del cálculo automático de estadísticas de distribución puede impedir que el optimizador de consultas elija los planes de ejecución óptimos para las consultas relativas a la tabla.Disabling automatic recomputation of distribution statistics may prevent the query optimizer from picking optimal execution plans for queries that involve the table.

STATISTICS_INCREMENTAL = { ON | OFF }STATISTICS_INCREMENTAL = { ON | OFF }
Cuando se establece en ON, se crean estadísticas por cada partición.When ON, the statistics created are per partition statistics. Cuando se establece en OFF, se quita el árbol de estadísticas y SQL ServerSQL Server recalcula las estadísticas.When OFF, the statistics tree is dropped and SQL ServerSQL Server re-computes the statistics. El valor predeterminado es OFF.The default is OFF.

Si no se admiten las estadísticas por partición, la opción se omite y se genera una advertencia.If per partition statistics are not supported the option is ignored and a warning is generated. Las estadísticas incrementales no se admiten para los siguientes tipos de estadísticas:Incremental stats are not supported for following statistics types:

  • Estadísticas creadas con índices que no están alineados por partición con la tabla base.Statistics created with indexes that are not partition-aligned with the base table.
  • Estadísticas creadas sobre bases de datos secundarias legibles AlwaysOn.Statistics created on Always On readable secondary databases.
  • Estadísticas creadas sobre bases de datos de solo lectura.Statistics created on read-only databases.
  • Estadísticas creadas sobre índices filtrados.Statistics created on filtered indexes.
  • Estadísticas creadas sobre vistas.Statistics created on views.
  • Estadísticas creadas sobre tablas internas.Statistics created on internal tables.
  • Estadísticas creadas con índices espaciales o índices XML.Statistics created with spatial indexes or XML indexes.

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x)) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x)) and SQL DatabaseSQL Database.

ONLINE = { ON | OFF } <as applies to rebuild_index_option>ONLINE = { ON | OFF } <as applies to rebuild_index_option>
Especifica si las tablas subyacentes y los índices asociados están disponibles para realizar consultas y modificar datos durante la operación de índice.Specifies whether underlying tables and associated indexes are available for queries and data modification during the index operation. El valor predeterminado es OFF.The default is OFF.

Para un índice XML o un índice espacial, solo se admite ONLINE = OFF y, si ONLINE se establece en ON, se produce un error.For an XML index or spatial index, only ONLINE = OFF is supported, and if ONLINE is set to ON an error is raised.

Nota

Las operaciones de índices en línea no están disponibles en todas las ediciones de MicrosoftMicrosoft SQL ServerSQL Server.Online index operations are not available in every edition of MicrosoftMicrosoft SQL ServerSQL Server. Para obtener una lista de las características admitidas por las ediciones de SQL ServerSQL Server, vea Ediciones y características admitidas de SQL Server 2017SQL Server 2016 (13.x)SQL Server 2016 (13.x) y Ediciones y características admitidas de SQL Server 2017.For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016 (13.x)SQL Server 2016 (13.x) and Editions and Supported Features for SQL Server 2017.

ONON
Los bloqueos de tabla de larga duración no se mantienen durante la operación de indización.Long-term table locks are not held for the duration of the index operation. Durante la fase principal de la operación de índice, solo se mantiene un bloqueo preventivo en la tabla de origen.During the main phase of the index operation, only an Intent Share (IS) lock is held on the source table. De esta forma, las consultas o actualizaciones realizadas en la tabla y los índices subyacentes pueden continuar.This allows queries or updates to the underlying table and indexes to continue. Al principio de la operación, se mantiene un bloqueo compartido (S) sobre el objeto de origen durante un breve período.At the start of the operation, a Shared (S) lock is very briefly held on the source object. Al final de la operación, durante un breve período, se adquiere un bloqueo S sobre el origen si se está creando un índice no clúster; o se adquiere un bloqueo SCH-M (modificación del esquema) cuando se crea o se quita un índice clúster en línea o cuando se regenera un índice clúster o no clúster.At the end of the operation, an S lock is very briefly held on the source if a nonclustered index is being created, or an SCH-M (Schema Modification) lock is acquired when a clustered index is created or dropped online, or when a clustered or nonclustered index is being rebuilt. ONLINE no se puede establecer en ON cuando se crea un índice en una tabla temporal local.ONLINE cannot be set to ON when an index is being created on a local temporary table.

OFFOFF
Los bloqueos de tabla se aplican durante la operación de índice.Table locks are applied for the duration of the index operation. Una operación de índice sin conexión que crea, vuelve a generar o quita un índice clúster, un índice espacial o un índice XML, o vuelve a generar o quita un índice no clúster, adquiere un bloqueo de modificación del esquema (Sch-M) en la tabla.An offline index operation that creates, rebuilds, or drops a clustered, spatial, or XML index, or rebuilds or drops a nonclustered index, acquires a Schema modification (Sch-M) lock on the table. Esto evita que todos los usuarios tengan acceso a la tabla subyacente durante la operación.This prevents all user access to the underlying table for the duration of the operation. Una operación de índice sin conexión que crea un índice no clúster adquiere un bloqueo compartido (S) en la tabla.An offline index operation that creates a nonclustered index acquires a Shared (S) lock on the table. Esto evita que se realicen actualizaciones en la tabla subyacente, pero permite la realización de operaciones de lectura, como instrucciones SELECT.This prevents updates to the underlying table but allows read operations, such as SELECT statements.

Para más información, vea Cómo funcionan las operaciones de índice en línea.For more information, see How Online Index Operations Work.

Los índices, incluidos los índices de las tablas temp globales, se pueden volver a generar en línea, con las excepciones siguientes:Indexes, including indexes on global temp tables, can be rebuilt online with the following exceptions:

  • índices XMLXML indexes

  • Índices en tablas temp localesIndexes on local temp tables

  • Un subconjunto de un índice con particiones (un índice entero con particiones se puede regenerar en línea).A subset of a partitioned index (An entire partitioned index can be rebuilt online.)

  • Las versiones de SQL DatabaseSQL Database anteriores a V12 y de SQL Server anteriores a SQL Server 2012 (11.x)SQL Server 2012 (11.x) no permiten la opción ONLINE para operaciones de regeneración o generación de índices agrupados cuando la tabla base contiene columnas varchar(max) o varbinary(max).SQL DatabaseSQL Database prior to V12, and SQL Server prior to SQL Server 2012 (11.x)SQL Server 2012 (11.x), do not permit the ONLINE option for clustered index build or rebuild operations when the base table contains varchar(max) or varbinary(max) columns.

RESUMABLE = { ON | OFF}RESUMABLE = { ON | OFF}

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x)) y SQL DatabaseSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and SQL DatabaseSQL Database

Especifica si una operación de índice en línea se puede reanudar.Specifies whether an online index operation is resumable.

ON: la operación de índice se puede reanudar.ON Index operation is resumable.

OFF: la operación de índice no se puede reanudar.OFF Index operation is not resumable.

MAX_DURATION = time [MINUTES] used with RESUMABLE = ON (requires ONLINE = ON).MAX_DURATION = time [MINUTES] used with RESUMABLE = ON (requires ONLINE = ON).

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x)) y SQL DatabaseSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and SQL DatabaseSQL Database

Indica el tiempo (valor entero especificado en minutos) durante el cual se ejecuta una operación de índice en línea reanudable antes de ponerse en pausa.Indicates time (an integer value specified in minutes) that a resumable online index operation is executed before being paused.

ALLOW_ROW_LOCKS = { ON | OFF }ALLOW_ROW_LOCKS = { ON | OFF }

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

Especifica si se permiten los bloqueos de fila.Specifies whether row locks are allowed. El valor predeterminado es ON.The default is ON.

ONON
Los bloqueos de fila se admiten al obtener acceso al índice.Row locks are allowed when accessing the index. El Motor de base de datosDatabase Engine determina cuándo se usan los bloqueos de fila.The Motor de base de datosDatabase Engine determines when row locks are used.

OFFOFF
No se usan los bloqueos de fila.Row locks are not used.

ALLOW_PAGE_LOCKS = { ON | OFF }ALLOW_PAGE_LOCKS = { ON | OFF }

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

Especifica si se permiten bloqueos de página.Specifies whether page locks are allowed. El valor predeterminado es ON.The default is ON.

ONON
Se permiten bloqueos de página cuando se tiene acceso al índice.Page locks are allowed when you access the index. Motor de base de datosDatabase Engine determina el momento en que se usan los bloqueos de página.The Motor de base de datosDatabase Engine determines when page locks are used.

OFFOFF
No se utilizan bloqueos de página.Page locks are not used.

Nota

No es posible reorganizar un índice cuando ALLOW_PAGE_LOCKS está establecido en OFF.An index cannot be reorganized when ALLOW_PAGE_LOCKS is set to OFF.

MAXDOP = max_degree_of_parallelismMAXDOP = max_degree_of_parallelism

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

Reemplaza la opción de configuración de max_degree_of_parallelism mientras dure la operación de índice.Overrides the max degree of parallelism configuration option for the duration of the index operation. Para obtener más información, vea Establecer la opción de configuración del servidor Grado máximo de paralelismo.For more information, see Configure the max degree of parallelism Server Configuration Option. Utilice MAXDOP para establecer un límite para el número de procesadores utilizados en la ejecución de un plan paralelo.Use MAXDOP to limit the number of processors used in a parallel plan execution. El máximo es 64 procesadores.The maximum is 64 processors.

Importante

Aunque la opción MAXDOP se admite sintácticamente para todos los índices XML, ALTER INDEX utiliza en la actualidad un solo procesador para un índice espacial o un índice XML principal.Although the MAXDOP option is syntactically supported for all XML indexes, for a spatial index or a primary XML index, ALTER INDEX currently uses only a single processor.

max_degree_of_parallelism puede tener estos valores:max_degree_of_parallelism can be:

11
Suprime la generación de planes paralelos.Suppresses parallel plan generation.

>1>1
Restringe el número máximo de procesadores utilizados en una operación de índice paralelo para el número especificado.Restricts the maximum number of processors used in a parallel index operation to the specified number.

0 (predeterminado)0 (default)
Usa el número real de procesadores o menos, según la carga de trabajo actual del sistema.Uses the actual number of processors or fewer based on the current system workload.

Para obtener más información, vea Configurar operaciones de índice en paralelo.For more information, see Configure Parallel Index Operations.

Nota

Las operaciones de índices en paralelo no están disponibles en todas las ediciones de MicrosoftMicrosoft SQL ServerSQL Server.Parallel index operations are not available in every edition of MicrosoftMicrosoft SQL ServerSQL Server. Para obtener una lista de las características admitidas por las ediciones de SQL ServerSQL Server, vea Características compatibles con las ediciones de SQL Server 2016 (13.x)SQL Server 2016 (13.x).For a list of features that are supported by the editions of SQL ServerSQL Server, see Editions and Supported Features for SQL Server 2016 (13.x)SQL Server 2016 (13.x).

COMPRESSION_DELAY = { 0 |duration [Minutes] }COMPRESSION_DELAY = { 0 |duration [Minutes] }
Esta característica está disponible a partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x).This feature is available Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x)

Para tablas basadas en disco, el retraso especifica el número mínimo de minutos que debe permanecer un grupo de filas delta con estado CLOSED en el grupo de filas delta antes de que SQL Server pueda comprimirlo en el grupo de filas comprimido.For a disk-based table, delay specifies the minimum number of minutes a delta rowgroup in the CLOSED state must remain in the delta rowgroup before SQL Server can compress it into the compressed rowgroup. Puesto que las tablas basadas en disco no realizan el seguimiento de los tiempos de inserción y actualización de filas individuales, SQL Server aplica el retraso a los grupos de filas delta en el estado CLOSED.Since disk-based tables don't track insert and update times on individual rows, SQL Server applies the delay to delta rowgroups in the CLOSED state.
El valor predeterminado es 0 minutos.The default is 0 minutes.

El valor predeterminado es 0 minutos.The default is 0 minutes.

Para obtener recomendaciones sobre cuándo usar COMPRESSION_DELAY, vea Introducción al almacén de columnas para análisis operativos en tiempo real.For recommendations on when to use COMPRESSION_DELAY, see Columnstore Indexes for Real-Time Operational Analytics.

DATA_COMPRESSIONDATA_COMPRESSION
Especifica la opción de compresión de datos para el índice, número de partición o intervalo de particiones especificado.Specifies the data compression option for the specified index, partition number, or range of partitions. Las opciones son las siguientes:The options are as follows:

NingunoNONE
No se comprimen el índice ni las particiones especificadas.Index or specified partitions are not compressed. Esto no se aplica a los índices de almacén de columnas.This does not apply to columnstore indexes.

ROWROW
El índice o las particiones especificadas se comprimen mediante la compresión de fila.Index or specified partitions are compressed by using row compression. Esto no se aplica a los índices de almacén de columnas.This does not apply to columnstore indexes.

PAGEPAGE
El índice o las particiones especificadas se comprimen mediante la compresión de página.Index or specified partitions are compressed by using page compression. Esto no se aplica a los índices de almacén de columnas.This does not apply to columnstore indexes.

COLUMNSTORECOLUMNSTORE

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x)) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x)) and SQL DatabaseSQL Database.

Solo se aplica a los índices de almacén de columnas, incluidos los clúster y no clúster.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE especifica que se descomprima el índice o las particiones especificadas comprimidas con la opción COLUMNSTORE_ARCHIVE.COLUMNSTORE specifies to decompress the index or specified partitions that are compressed with the COLUMNSTORE_ARCHIVE option. Cuando se restablecen los datos, seguirán estando comprimidos con la compresión de almacén de columnas que se usa para todos los índices de almacén de columnas.When the data is restored, it will continue to be compressed with the columnstore compression that is used for all columnstore indexes.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x)) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x)) and SQL DatabaseSQL Database.

Solo se aplica a los índices de almacén de columnas, incluidos los clúster y no clúster.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE_ARCHIVE comprimirá aún más la partición especificada a un tamaño mínimo.COLUMNSTORE_ARCHIVE will further compress the specified partition to a smaller size. Esto se puede usar para el archivado o para otras situaciones que requieran un tamaño de almacenamiento mínimo y pueda permitirse más tiempo para el almacenamiento y recuperación.This can be used for archival, or for other situations that require a smaller storage size and can afford more time for storage and retrieval.

Para más información sobre la compresión, vea Compresión de datos.For more information about compression, see Data Compression.

ON PARTITIONS ( { <partition_number_expression> | <range> } [,...n] )ON PARTITIONS ( { <partition_number_expression> | <range> } [,...n] )

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

Especifica las particiones a las que se aplica el valor DATA_COMPRESSION.Specifies the partitions to which the DATA_COMPRESSION setting applies. Si el índice no tiene particiones, el argumento ON PARTITIONS generará un error.If the index is not partitioned, the ON PARTITIONS argument will generate an error. Si no se proporciona la cláusula ON PARTITIONS, la opción DATA_COMPRESSION se aplica a todas las particiones de un índice con particiones.If the ON PARTITIONS clause is not provided, the DATA_COMPRESSION option applies to all partitions of a partitioned index.

<partition_number_expression> se puede especificar de las maneras siguientes:<partition_number_expression> can be specified in the following ways:

  • Proporcionar el número de una partición, por ejemplo: EN PARTICIONES (2).Provide the number for a partition, for example: ON PARTITIONS (2).

  • Proporcionar los números de partición para varias particiones individuales separadas por comas, por ejemplo: EN PARTICIONES (1,5).Provide the partition numbers for several individual partitions separated by commas, for example: ON PARTITIONS (1, 5).

  • Proporcionar particiones individuales y de intervalos: EN PARTICIONES (2, 4, 6 A 8).Provide both ranges and individual partitions: ON PARTITIONS (2, 4, 6 TO 8).

<range> se puede especificar como números de partición separados por la palabra TO, por ejemplo: EN PARTICIONES (6 A 8).<range> can be specified as partition numbers separated by the word TO, for example: ON PARTITIONS (6 TO 8).

Para establecer diferentes tipos de compresión de datos para distintas particiones, especifique la opción DATA_COMPRESSION más de una vez, por ejemplo:To set different types of data compression for different partitions, specify the DATA_COMPRESSION option more than once, for example:

REBUILD WITH   
(  
DATA_COMPRESSION = NONE ON PARTITIONS (1),   
DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),   
DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)  
);  

ONLINE = { ON | OFF } <as applies to single_partition_rebuild_index_option>ONLINE = { ON | OFF } <as applies to single_partition_rebuild_index_option>
Especifica si un índice o una partición de índice de una tabla subyacente se puede regenerar en línea o sin conexión.Specifies whether an index or an index partition of an underlying table can be rebuilt online or offline. Si REBUILD se realiza en línea (ON), los datos de esta tabla están disponibles para las consultas y la modificación de datos durante la operación de índice.If REBUILD is performed online (ON) the data in this table is available for queries and data modification during the index operation. El valor predeterminado es OFF.The default is OFF.

ONON
Los bloqueos de tabla de larga duración no se mantienen durante la operación de indización.Long-term table locks are not held for the duration of the index operation. Durante la fase principal de la operación de índice, solo se mantiene un bloqueo preventivo en la tabla de origen.During the main phase of the index operation, only an Intent Share (IS) lock is held on the source table. Se necesita un bloqueo S en la tabla al inicio de la regeneración del índice y un bloqueo Sch-M en la tabla al final de la regeneración del índice en línea.An S-lock on the table is required in the Starting of the index rebuild and a Sch-M lock on the table at the end of the online index rebuild. Aunque ambos bloqueos son bloqueos de metadatos cortos, especialmente el bloqueo Sch-M debe esperar a que todas las transacciones de bloqueo se completen.Although both locks are short metadata locks, especially the Sch-M lock must wait for all blocking transactions to be completed. Durante el tiempo de espera, bloqueo Sch-M bloquea las demás transacciones que esperen a este bloqueo al tener acceso a la misma tabla.During the wait time the Sch-M lock blocks all other transactions that wait behind this lock when accessing the same table.

Nota

La regeneración de índice en línea puede establecer las opciones low_priority_lock_wait que se describen más adelante en esta sección.Online index rebuild can set the low_priority_lock_wait options described later in this section.

OFFOFF
Los bloqueos de tabla se aplican durante la operación de índice.Table locks are applied for the duration of the index operation. Esto evita que todos los usuarios tengan acceso a la tabla subyacente durante la operación.This prevents all user access to the underlying table for the duration of the operation.

WAIT_AT_LOW_PRIORITY solo se usa con ONLINE=ON.WAIT_AT_LOW_PRIORITY used with ONLINE=ON only.

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x)) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x)) and SQL DatabaseSQL Database.

Una recompilación de índices en línea tiene que esperar a las operaciones de bloqueo en esta tabla.An online index rebuild has to wait for blocking operations on this table. WAIT_AT_LOW_PRIORITY indica que la operación de regeneración de índice en línea esperará a los bloqueos de prioridad baja, de forma que otras operaciones podrán continuar mientras la operación de generación de índice en línea está en espera.WAIT_AT_LOW_PRIORITY indicates that the online index rebuild operation will wait for low priority locks, allowing other operations to proceed while the online index build operation is waiting. La omisión de la opción WAIT AT LOW PRIORITY equivale a WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutos, ABORT_AFTER_WAIT = NONE).Omitting the WAIT AT LOW PRIORITY option is equivalent to WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). Para más información, vea WAIT_AT_LOW_PRIORITY.For more information, see WAIT_AT_LOW_PRIORITY.

MAX_DURATION = time [MINUTES]MAX_DURATION = time [MINUTES]

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x)) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x)) and SQL DatabaseSQL Database.

El tiempo de espera (valor entero especificado en minutos) que esperarán con prioridad baja los bloqueos de la operación de recompilación de índices en línea cuando se ejecuta el comando DDL.The wait time (an integer value specified in minutes) that the online index rebuild locks will wait with low priority when executing the DDL command. Si la operación se bloquea durante el tiempo de MAX_DURATION, se ejecutará una de las acciones ABORT_AFTER_WAIT.If the operation is blocked for the MAX_DURATION time, one of the ABORT_AFTER_WAIT actions will be executed. El tiempo de MAX_DURATION siempre es en minutos y la palabra MINUTES puede omitirse.MAX_DURATION time is always in minutes, and the word MINUTES can be omitted.

ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]ABORT_AFTER_WAIT = [NONE | SELF | BLOCKERS } ]

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x)) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x)) and SQL DatabaseSQL Database.

NingunoNONE
Se continúa esperando al bloqueo con prioridad normal.Continue waiting for the lock with normal (regular) priority.

SELFSELF
Cierra la operación DDL de regeneración del índice en línea que se está ejecutando actualmente sin realizar ninguna acción.Exit the online index rebuild DDL operation currently being executed without taking any action.

BLOCKERSBLOCKERS
Elimine todas las transacciones de usuario que bloqueen la operación DDL de regeneración de índice en línea de forma que la operación pueda continuar.Kill all user transactions that block the online index rebuild DDL operation so that the operation can continue. Para la opción BLOCKERS, es necesario que el inicio de sesión tenga el permiso ALTER ANY CONNECTION.The BLOCKERS option requires the login to have ALTER ANY CONNECTION permission.

RESUMERESUME

Se aplica a: A partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x)Applies to: Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)

Reanudar una operación de índice que se haya pausado manualmente o debido a un error.Resume an index operation that is paused manually or due to a failure.

MAX_DURATION se usa con RESUMABLE=ONMAX_DURATION used with RESUMABLE=ON

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x)) y SQL DatabaseSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and SQL DatabaseSQL Database

El tiempo (valor entero especificado en minutos) durante el cual se ejecuta la operación de índice en línea reanudable después de reanudarse.The time (an integer value specified in minutes) the resumable online index operation is executed after being resumed. Cuando este tiempo expira, se pone en pausa la operación reanudable si todavía se está ejecutando.Once the time expires, the resumable operation is paused if it is still running.

WAIT_AT_LOW_PRIORITY se usa con RESUMABLE=ON y ONLINE = ON.WAIT_AT_LOW_PRIORITY used with RESUMABLE=ON and ONLINE = ON.

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x)) y SQL DatabaseSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and SQL DatabaseSQL Database

Para reanudar una regeneración de índice en línea después de una pausa es necesario esperar a las operaciones de bloqueo de esta tabla.Resuming an online index rebuild after a pause has to wait for blocking operations on this table. WAIT_AT_LOW_PRIORITY indica que la operación de regeneración de índice en línea esperará a los bloqueos de prioridad baja, de forma que otras operaciones podrán continuar mientras la operación de generación de índice en línea está en espera.WAIT_AT_LOW_PRIORITY indicates that the online index rebuild operation will wait for low priority locks, allowing other operations to proceed while the online index build operation is waiting. La omisión de la opción WAIT AT LOW PRIORITY equivale a WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutos, ABORT_AFTER_WAIT = NONE).Omitting the WAIT AT LOW PRIORITY option is equivalent to WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE). Para más información, vea WAIT_AT_LOW_PRIORITY.For more information, see WAIT_AT_LOW_PRIORITY.

PAUSEPAUSE

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x)) y SQL DatabaseSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and SQL DatabaseSQL Database

Pausa una operación de regeneración de índice en línea reanudable.Pause a resumable online index rebuild operation.

ABORTABORT

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x)) y SQL DatabaseSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and SQL DatabaseSQL Database

Anular una operación de índice que está ejecutándose o en pausa y que se había declarado como reanudable.Abort a running or paused index operation that was declared as resumable. Tendrá que ejecutar explícitamente un comando ABORT para terminar una operación de regeneración de índice reanudable.You have to explicitly execute an ABORT command to terminate a resumable index rebuild operation. La ejecución de una operación de índice reanudable no termina cuando esta da error o se pone en pausa, sino que la operación se queda en un estado de pausa indefinido.Failure or pausing a resumable index operation does not terminate its execution; rather, it leaves the operation in an indefinite pause state.

NotasRemarks

No es posible utilizar ALTER INDEX para volver a crear particiones en un índice o moverlo a un grupo de archivos distinto.ALTER INDEX cannot be used to repartition an index or move it to a different filegroup. No se puede usar esta instrucción para modificar la definición de índice; por ejemplo, para agregar o eliminar columnas o cambiar su orden.This statement cannot be used to modify the index definition, such as adding or deleting columns or changing the column order. Utilice CREATE INDEX con la cláusula DROP_EXISTING para realizar estas operaciones.Use CREATE INDEX with the DROP_EXISTING clause to perform these operations.

Cuando no se especifica una opción de forma explícita, se aplica el valor actual.When an option is not explicitly specified, the current setting is applied. Por ejemplo, si no se especifica un valor FILLFACTOR en la cláusula REBUILD, se utilizará el valor de factor de relleno almacenado en el catálogo del sistema durante el proceso de regeneración.For example, if a FILLFACTOR setting is not specified in the REBUILD clause, the fill factor value stored in the system catalog will be used during the rebuild process. Para ver la configuración de las opciones de índice actuales, use sys.indexes.To view the current index option settings, use sys.indexes.

Los valores de ONLINE, MAXDOP y SORT_IN_TEMPDB no se almacenan en el catálogo del sistema.The values for ONLINE, MAXDOP, and SORT_IN_TEMPDB are not stored in the system catalog. A menos que se especifiquen en la instrucción de índice, se utiliza el valor predeterminado de la opción.Unless specified in the index statement, the default value for the option is used.

En equipos con varios procesadores, al igual que otras consultas, ALTER INDEX... REBUILD usa automáticamente más procesadores para realizar las operaciones de examen y orden asociadas a la modificación del índice.On multiprocessor computers, just like other queries do, ALTER INDEX ... REBUILD automatically uses more processors to perform the scan and sort operations that are associated with modifying the index. Al ejecutar ALTER INDEX... REORGANIZE, con o sin LOB_COMPACTION, el valor de Grado máximo de paralelismo es una operación de un solo subproceso.When you run ALTER INDEX ... REORGANIZE, with or without LOB_COMPACTION, the max degree of parallelism value is a single threaded operation. Para obtener más información, vea Configurar operaciones de índice en paralelo.For more information, see Configure Parallel Index Operations.

Importante

No es posible volver a organizar o generar un índice si el grupo de archivos en el que se encuentra está sin conexión o está definido como de solo lectura.An index cannot be reorganized or rebuilt if the filegroup in which it is located is offline or set to read-only. Cuando se especifica la palabra clave ALL y hay uno o más índices en un grupo de archivos sin conexión o de solo lectura, se produce un error en la instrucción.When the keyword ALL is specified and one or more indexes are in an offline or read-only filegroup, the statement fails.

Regenerar índicesRebuilding Indexes

El proceso de volver a crear un índice quita y vuelve a crear el índice.Rebuilding an index drops and re-creates the index. Quita la fragmentación, utiliza espacio en disco al compactar las páginas según el valor de factor de relleno especificado o existente y vuelve a ordenar las filas del índice en páginas contiguas.This removes fragmentation, reclaims disk space by compacting the pages based on the specified or existing fill factor setting, and reorders the index rows in contiguous pages. Cuando se especifica ALL, todos los índices de la tabla se quitan y se vuelven a generar en una única transacción.When ALL is specified, all indexes on the table are dropped and rebuilt in a single transaction. No es necesario quitar las restricciones FOREIGN KEY por adelantado.Foreign key constraints do not have to be dropped in advance. Cuando se regeneran índices con 128 extensiones o más, el Motor de base de datosDatabase Engine difiere las cancelaciones de asignación de página y sus bloqueos asociados hasta después de la confirmación de la transacción.When indexes with 128 extents or more are rebuilt, the Motor de base de datosDatabase Engine defers the actual page deallocations, and their associated locks, until after the transaction commits.

Para obtener más información, vea Reorganizar y volver a generar índices.For more information, see Reorganize and Rebuild Indexes.

Nota

Con frecuencia, cuando se vuelven a generar o se reorganizan los índices pequeños no se reduce la fragmentación.Rebuilding or reorganizing small indexes often does not reduce fragmentation. Las páginas de índices pequeños a veces se almacenan en extensiones mixtas.The pages of small indexes are sometimes stored on mixed extents. Las extensiones mixtas pueden estar compartidas por hasta ocho objetos, de modo que es posible que no se pueda reducir la fragmentación en un índice pequeño después de reorganizar o volver a generar dicho índice.Mixed extents are shared by up to eight objects, so the fragmentation in a small index might not be reduced after reorganizing or rebuilding it.

Importante

Cuando se crea o se vuelve a generar un índice en SQL ServerSQL Server, las estadísticas se crean o se actualizan examinando todas las filas de la tabla.When an index is created or rebuilt in SQL ServerSQL Server, statistics are created or updated by scanning all the rows in the table.

Pero a partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x), las estadísticas no se crean examinando todas las filas de la tabla cuando se crea o se vuelve a generar un índice con particiones.However, starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), statistics are not created by scanning all the rows in the table when a partitioned index is created or rebuilt. En su lugar, el optimizador de consultas usa el algoritmo de muestreo predeterminado para generar estas estadísticas.Instead, the query optimizer uses the default sampling algorithm to generate these statistics. Para obtener estadísticas sobre índices con particiones examinando todas las filas de la tabla, use CREATE STATISTICS o UPDATE STATISTICS con la cláusula FULLSCAN.To obtain statistics on partitioned indexes by scanning all the rows in the table, use CREATE STATISTICS or UPDATE STATISTICS with the FULLSCAN clause.

En versiones anteriores de SQL ServerSQL Server, a veces se podía volver a generar un índice no clúster para corregir incoherencias provocadas por errores de hardware.In earlier versions of SQL ServerSQL Server, you could sometimes rebuild a nonclustered index to correct inconsistencies caused by hardware failures.
En SQL Server 2008SQL Server 2008 y versiones posteriores, aún es posible reparar estas incoherencias entre el índice y el índice clúster al volver a generar un índice no clúster sin conexión.In SQL Server 2008SQL Server 2008 and later, you may still be able to repair such inconsistencies between the index and the clustered index by rebuilding a nonclustered index offline. Sin embargo, no es posible reparar las incoherencias de índices no clúster mediante la regeneración del índice en línea, ya que el mecanismo de regeneración con conexión usará el índice no clúster existente como base para la regeneración y, por tanto, persistirá la incoherencia.However, you cannot repair nonclustered index inconsistencies by rebuilding the index online, because the online rebuild mechanism will use the existing nonclustered index as the basis for the rebuild and thus persist the inconsistency. La regeneración del índice sin conexión hará que se examine el índice clúster (o montón) y eliminará la incoherencia.Rebuilding the index offline can sometimes force a scan of the clustered index (or heap) and so remove the inconsistency. Para garantizar una regeneración del índice clúster, quite y vuelva a crear el índice no agrupado.To assure a rebuild from the clustered index, drop and recreate the non-clustered index. Al igual que en las versiones anteriores, para recuperar incoherencias se recomienda restaurar los datos afectados desde una copia de seguridad. No obstante, es posible que pueda reparar las incoherencias del índice mediante la regeneración del índice no clúster sin conexión.As with earlier versions, we recommend recovering from inconsistencies by restoring the affected data from a backup; however, you may be able to repair the index inconsistencies by rebuilding the nonclustered index offline. Para obtener más información, vea DBCC CHECKDB (Transact-SQL).For more information, see DBCC CHECKDB (Transact-SQL).

Para volver a generar un índice de almacén de columnas clúster, SQL ServerSQL Server:To rebuild a clustered columnstore index, SQL ServerSQL Server:

  1. Adquiere un bloqueo exclusivo en la tabla o la partición mientras se produce la regeneración.Acquires an exclusive lock on the table or partition while the rebuild occurs. Los datos están “sin conexión” y no disponibles durante la regeneración.The data is "offline" and unavailable during the rebuild.

  2. Desfragmenta el almacén de columnas físicamente eliminando filas que se han eliminado lógicamente de la tabla; los bytes eliminados se reclaman en los medios físicos.Defragments the columnstore by physically deleting rows that have been logically deleted from the table; the deleted bytes are reclaimed on the physical media.

  3. Lee todos los datos del índice original de almacén de columnas, incluido el almacén delta.Reads all data from the original columnstore index, including the deltastore. Combina los datos en grupos de filas nuevos y comprime los grupos de filas en el almacén de columnas.It combines the data into new rowgroups, and compresses the rowgroups into the columnstore.

  4. Necesita espacio en los medios físicos para almacenar dos copias del índice de almacén de columnas mientras está teniendo lugar la regeneración.Requires space on the physical media to store two copies of the columnstore index while the rebuild is taking place. Cuando finaliza la regeneración, SQL ServerSQL Server elimina el índice clúster de almacén de columnas original.When the rebuild is finished, SQL ServerSQL Server deletes the original clustered columnstore index.

Reorganizar índicesReorganizing Indexes

La reorganización de un índice usa muy pocos recursos del sistema.Reorganizing an index uses minimal system resources. Desfragmenta el nivel hoja de los índices agrupados y no clúster de las tablas y las vistas al volver a ordenar físicamente las páginas de nivel hoja para que coincidan con el orden lógico de los nodos hoja, de izquierda a derecha.It defragments the leaf level of clustered and nonclustered indexes on tables and views by physically reordering the leaf-level pages to match the logical, left to right, order of the leaf nodes. La reorganización también compacta las páginas de índice.Reorganizing also compacts the index pages. La compactación se basa en el valor de factor de relleno existente.Compaction is based on the existing fill factor value. Para ver el valor de factor de relleno, use sys.indexes.To view the fill factor setting, use sys.indexes.

Cuando se especifica ALL, se reorganizan los índices relacionales, tanto agrupados como no clúster, y los índices XML.When ALL is specified, relational indexes, both clustered and nonclustered, and XML indexes on the table are reorganized. Cuando se especifica ALL, se aplican algunas restricciones; vea la definición de ALL en la sección Argumentos de este artículo.Some restrictions apply when specifying ALL, refer to the definition for ALL in the Arguments section of this article.

Para obtener más información, vea Reorganizar y volver a generar índices.For more information, see Reorganize and Rebuild Indexes.

Importante

Cuando se reorganiza un índice en SQL ServerSQL Server, las estadísticas no se actualizan.When an index is reorganized in SQL ServerSQL Server, statistics are not updated.

Deshabilitar índicesDisabling Indexes

Al deshabilitar un índice, se impide que el usuario tenga acceso al mismo y, en el caso de los índices clúster, a los datos de la tabla subyacente.Disabling an index prevents user access to the index, and for clustered indexes, to the underlying table data. La definición de índice permanece en el catálogo del sistema.The index definition remains in the system catalog. La deshabilitación de un índice no clúster o agrupado en una vista elimina físicamente los datos del índice.Disabling a nonclustered index or clustered index on a view physically deletes the index data. La deshabilitación de un índice clúster evita el acceso a los datos, aunque éstos permanecen en el árbol b hasta que el índice se quita o se vuelve a generar.Disabling a clustered index prevents access to the data, but the data remains unmaintained in the B-tree until the index is dropped or rebuilt. Para ver el estado de un índice habilitado o deshabilitado, realice una consulta en la columna is_disabled de la vista de catálogo sys.indexes.To view the status of an enabled or disabled index, query the is_disabled column in the sys.indexes catalog view.

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.If a table is in a transactional replication publication, you cannot disable any indexes that are associated with primary key columns. Estos índices son necesarios para la replicación.These indexes are required by replication. Para deshabilitar un índice, primero debe quitar la tabla de la publicación.To disable an index, you must first drop the table from the publication. Para obtener más información sobre la creación de publicaciones, vea Publicar datos y objetos de base de datos.For more information, see Publish Data and Database Objects.

Utilice la instrucción ALTER INDEX REBUILD o CREATE INDEX WITH DROP_EXISTING para habilitar el índice.Use the ALTER INDEX REBUILD statement or the CREATE INDEX WITH DROP_EXISTING statement to enable the index. 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 with the ONLINE option set to ON. Para obtener más información, vea Deshabilitar índices y restricciones.For more information, see Disable Indexes and Constraints.

Configurar opcionesSetting Options

Es posible establecer las opciones ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY y STATISTICS_NORECOMPUTE de un índice especificado sin volver a generar u organizar ese índice.You can set the options ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY and STATISTICS_NORECOMPUTE for a specified index without rebuilding or reorganizing that index. Los valores modificados se aplican inmediatamente al índice.The modified values are immediately applied to the index. Para ver estos valores, use sys.indexes.To view these settings, use sys.indexes. Para obtener más información, consulte Establecer opciones de índice.For more information, see Set Index Options.

Opciones de bloqueo de fila y páginaRow and Page Locks Options

Si ALLOW_ROW_LOCKS = ON y ALLOW_PAGE_LOCK = ON, se permiten los bloqueos de nivel de fila, página y tabla cuando se obtiene acceso al índice.When ALLOW_ROW_LOCKS = ON and ALLOW_PAGE_LOCK = ON, row-level, page-level, and table-level locks are allowed when you access the index. Motor de base de datosDatabase Engine elige el bloqueo apropiado y puede cambiar de escala el bloqueo: de un bloqueo de fila o página a un bloqueo de tabla.The Motor de base de datosDatabase Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock.

Si ALLOW_ROW_LOCKS = OFF y ALLOW_PAGE_LOCK = OFF, solo se permiten los bloqueos de nivel de tabla cuando se tiene acceso al índice.When ALLOW_ROW_LOCKS = OFF and ALLOW_PAGE_LOCK = OFF, only a table-level lock is allowed when you access the index.

Si se especifica ALL al establecer las opciones de bloqueo de fila o página, la configuración se aplica a todos los índices.If ALL is specified when the row or page lock options are set, the settings are applied to all indexes. Cuando la tabla subyacente es un montón, la configuración se aplica de las siguientes formas:When the underlying table is a heap, the settings are applied in the following ways:

ALLOW_ROW_LOCKS = ON u OFFALLOW_ROW_LOCKS = ON or OFF Al montón y a cualquier índice no clúster asociado.To the heap and any associated nonclustered indexes.
ALLOW_PAGE_LOCKS = ONALLOW_PAGE_LOCKS = ON Al montón y a cualquier índice no clúster asociado.To the heap and any associated nonclustered indexes.
ALLOW_PAGE_LOCKS = OFFALLOW_PAGE_LOCKS = OFF Completamente a los índices no clúster.Fully to the nonclustered indexes. Esto significa que no se permite ningún bloqueo de página en los índices no clúster.This means that all page locks are not allowed on the nonclustered indexes. En el montón, los únicos bloqueos no permitidos para la página son los bloqueos compartidos (S), de actualización (U) y exclusivos (X).On the heap, only the shared (S), update (U) and exclusive (X) locks for the page are not allowed. El Motor de base de datosDatabase Engine aún puede adquirir un bloqueo de página de intención (IS, IU o IX) por motivos internos.The Motor de base de datosDatabase Engine can still acquire an intent page lock (IS, IU or IX) for internal purposes.

Operaciones de índice en líneaOnline Index Operations

Cuando se vuelve a generar un índice y la opción ONLINE está establecida en ON, los objetos subyacentes, las tablas y los índices asociados están disponibles para las consultas y la modificación de datos.When rebuilding an index and the ONLINE option is set to ON, the underlying objects, the tables and associated indexes, are available for queries and data modification. También puede regenerar en línea una parte de un índice que resida en una sola partición.You can also rebuild online a portion of an index residing on a single partition. Los bloqueos de tabla exclusivos solo se mantienen un espacio de tiempo muy reducido durante el proceso de modificación.Exclusive table locks are held only for a very short amount of time during the alteration process.

La reorganización de un índice siempre se realiza en línea.Reorganizing an index is always performed online. El proceso no mantiene bloqueos a largo plazo y, por ello, no bloquea las consultas o las actualizaciones en ejecución.The process does not hold locks long term and, therefore, does not block queries or updates that are running.

Únicamente se pueden realizar operaciones de índice simultáneas en línea en la misma tabla o partición de tabla si se hace lo siguiente:You can perform concurrent online index operations on the same table or table partition only when doing the following:

  • Crear varios índices no clúster.Creating multiple nonclustered indexes.
  • Reorganizar diferentes índices en la misma tabla.Reorganizing different indexes on the same table.
  • Reorganizar diferentes índices mientras se vuelven a generar índices que no se superponen en la misma tabla.Reorganizing different indexes while rebuilding nonoverlapping indexes on the same table.

Se producirá un error en todas las operaciones de índice en línea que se realizan al mismo momento.All other online index operations performed at the same time fail. Por ejemplo, no es posible volver a generar dos o más índices en la misma tabla de forma simultánea ni crear un índice nuevo mientras se regenera un índice existente en la misma tabla.For example, you cannot rebuild two or more indexes on the same table concurrently, or create a new index while rebuilding an existing index on the same table.

Operaciones de índice reanudableResumable index operations

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x)) y SQL DatabaseSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and SQL DatabaseSQL Database

ONLINE INDEX REBUILD se especifica como reanudable mediante la opción RESUMABLE = ON.Online index rebuild is specified as resumable using the RESUMABLE = ON option.

  • La opción RESUMABLE no se conserva en los metadatos de un índice dado y solo se aplica a la duración de una instrucción DDL actual.The RESUMABLE option is not persisted in the metadata for a given index and applies only to the duration of a current DDL statement. Por tanto, la cláusula RESUMABLE = ON debe especificarse explícitamente para habilitar la capacidad de reanudación.Therefore, the RESUMABLE = ON clause must be specified explicitly to enable resumability.

  • La opción MAX_DURATION es compatible con la opción RESUMABLE = ON o la opción del argumento low_priority_lock_wait.MAX_DURATION option is supported for RESUMABLE = ON option or the low_priority_lock_wait argument option.

    • MAX_DURATION para la opción RESUMABLE especifica el intervalo de tiempo para regenerar un índice.MAX_DURATION for RESUMABLE option specifies the time interval for an index being rebuild. Una vez pasado este tiempo, la operación de regeneración de índice se pausa o completa su ejecución.Once this time is used the index rebuild is either paused or it completes its execution. El usuario decide cuándo se puede reanudar una recompilación de un índice en pausa.User decides when a rebuild for a paused index can be resumed. El valor de time en minutos para MAX_DURATION debe ser mayor que 0 minutos y menor o igual que una semana (7 * 24 * 60 = 10080 minutos).The time in minutes for MAX_DURATION must be greater than 0 minutes and less or equal one week (7 * 24 * 60 = 10080 minutes). Si se hace una pausa larga en una operación de índice puede afectar al rendimiento de DML en una tabla específica, así como a la capacidad de disco de base de datos, dado que ambos índices, el original y el que se acaba de crear, necesitan espacio en disco y deben actualizarse durante las operaciones de DML.Having a long pause for an index operation may impact the DML performance on a specific table as well as the database disk capacity since both indexes the original one and the newly created one require disk space and need to be updated during DML operations. Si se omite la opción MAX_DURATION, la operación de índice continuará hasta su finalización o hasta que se produzca un error.If MAX_DURATION option is omitted, the index operation will continue until its completion or until a failure occurs.
    • La opción del argumento <low_priority_lock_wait> permite al usuario decidir cómo puede continuar la operación de índice cuando se bloquea en el bloqueo SCH-M.The <low_priority_lock_wait> argument option allows you to decide how the index operation can proceed when blocked on the SCH-M lock.
  • Al volver a ejecutar la instrucción ALTER INDEX REBUILD original con los mismos parámetros, se reanuda una operación de regeneración de índice en pausa.Re-executing the original ALTER INDEX REBUILD statement with the same parameters resumes a paused index rebuild operation. También se puede reanudar una operación de regeneración de índice en pausa mediante la instrucción ALTER INDEX RESUME.You can also resume a paused index rebuild operation by executing the ALTER INDEX RESUME statement.

  • La opción SORT_IN_TEMPDB=ON no es compatible con el índice reanudable.The SORT_IN_TEMPDB=ON option is not supported for resumable index

  • El comando DDL con RESUMABLE=ON no se puede ejecutar dentro de una transacción explícita (no puede formar parte del bloque begin tran ... commit).The DDL command with RESUMABLE=ON cannot be executed inside an explicit transaction (cannot be part of begin tran ... commit block).

  • Solo se pueden reanudar aquellas operaciones de índice que estén en pausa.Only index operations that are paused are resumable.

  • Cuando se reanuda una operación de índice que está en pausa, se puede cambiar el valor de MAXDOP a un nuevo valor.When resuming an index operation that is paused, you can change the MAXDOP value to a new value. Si MAXDOP no se especifica cuando se reanuda una operación de índice que está en pausa, se toma el último valor MAXDOP.If MAXDOP is not specified when resuming an index operation that is paused, the last MAXDOP value is taken. Si la opción MAXDOP no se especifica en absoluto para la operación de regeneración de índice, se toma el valor predeterminado.IF the MAXDOP option is not specified at all for index rebuild operation, the default value is taken.

  • Para pausar inmediatamente la operación de índice, puede detener el comando en curso (Ctrl+C) o puede ejecutar el comando ALTER INDEX PAUSE o el comando KILL session_id.To pause immediately the index operation, you can stop the ongoing command (Ctrl-C) or you can execute the ALTER INDEX PAUSE command or the KILL session_id command. Una vez que el comando está en pausa, se puede reanudar mediante la opción RESUME.Once the command is paused it can be resumed using RESUME option.

  • El comando ABORT termina la sesión que hospedaba la regeneración de índice original y anula la operación de índice.The ABORT command kills the session that hosted the original index rebuild and aborts the index operation

  • No se necesita ningún recurso adicional para la regeneración de índice reanudable, excepto para:No extra resources are required for resumable index rebuild except for

    • el espacio adicional necesario para mantener el índice que se está generando, incluida la hora en que se pausó el índice;Additional space required to keep the index being built, including the time when index is being paused
    • un estado DDL que impida cualquier modificación de DDL.A DDL state preventing any DDL modification
  • La limpieza de registros fantasma se ejecutará durante la fase de pausa del índice, pero se pondrá en pausa durante la ejecución del índice.The ghost cleanup will be running during the index pause phase, but it will be paused during index run
    Abajo se detallan las funciones que se deshabilitan para las operaciones de regeneración de índice reanudables:The following functionality is disabled for resumable index rebuild operations

    • Regenerar un índice que está deshabilitado no es compatible con RESUMABLE=ONRebuilding an index that is disabled is not supported with RESUMABLE=ON
    • Comando ALTER INDEX REBUILD ALLALTER INDEX REBUILD ALL command
    • ALTER TABLE mediante regeneración de índiceALTER TABLE using index rebuild
    • El comando DDL con “RESUMABLE = ON” no se puede ejecutar dentro de una transacción explícita (no puede formar parte del bloque begin tran ... commit)DDL command with "RESUMEABLE = ON" cannot be executed inside an explicit transaction (cannot be part of begin tran ... commit block)
    • Regenerar un índice que tiene columnas TIMESTAMP o calculadas como columnas de clave.Rebuild an index that has computed or TIMESTAMP column(s) as key columns.
  • En caso de que la tabla base contenga columnas LOB reanudables, para la regeneración de índice agrupado reanudable se necesita un bloqueo Sch-M al inicio de esta operación.In case the base table contains LOB column(s) resumable clustered index rebuild requires a Sch-M lock in the Starting of this operation

  • La opción SORT_IN_TEMPDB=ON no es compatible con el índice reanudable.The SORT_IN_TEMPDB=ON option is not supported for resumable index

Nota

El comando DDL se ejecuta hasta que se completa, se pone en pausa o genera un error.The DDL command runs until it completes, pauses or fails. En caso de que el comando se ponga en pausa, se emite un error que indica que se pausó la operación y que no se completó la creación de índice.In case the command pauses, an error will be issued indicating that the operation was paused and that the index creation did not complete. Para más información sobre el estado actual del índice, vea sys.index_resumable_operations.More information about the current index status can be obtained from sys.index_resumable_operations. Como ocurrió antes, en caso de fallo se generará también un error.As before in case of a failure an error will be issued as well.

Para más información, consulte Perform Index Operations Online.For more information, see Perform Index Operations Online.

WAIT_AT_LOW_PRIORITY con operaciones de índice en líneaWAIT_AT_LOW_PRIORITY with online index operations

Para ejecutar la instrucción DDL para regenerar el índice en línea, todas las transacciones activas de bloqueo que se ejecutan en una tabla determinada deben completarse.In order to execute the DDL statement for an online index rebuild, all active blocking transactions running on a particular table must be completed. Cuando la regeneración de índice en línea se ejecuta, bloquea todas las nuevas transacciones que están listas para iniciar la ejecución en esta tabla.When the online index rebuild executes, it blocks all new transactions that are ready to start execution on this table. Aunque la vigencia del bloqueo para volver a generar el índice en línea es muy corta, si se espera a que las transacciones abiertas en una tabla dada se completen y se bloquean las nuevas transacciones que se inician, se podría afectar significativamente al rendimiento, produciendo un retraso o un tiempo de espera en la carga de trabajo y se limitaría mucho el acceso a la tabla base.Although the duration of the lock for online index rebuild is very short, waiting for all open transactions on a given table to complete and blocking the new transactions to start, might significantly affect the throughput, causing a workload slow down or timeout, and significantly limit access to the underlying table. Con la opción WAIT_AT_LOW_PRIORITY, el DBA puede administrar los bloqueos S-lock y Sch-M necesarios para las regeneraciones de índice en línea y seleccionar una de las tres opciones.The WAIT_AT_LOW_PRIORITY option allows DBA's to manage the S-lock and Sch-M locks required for online index rebuilds and allows them to select one of 3 options. En los tres casos, si durante el tiempo de espera ( (MAX_DURATION = n [minutos]) ) no hay actividades de bloqueo, la regeneración de índice en línea se ejecuta inmediatamente sin esperar y la instrucción DDL se completa.In all 3 cases, if during the wait time ( (MAX_DURATION = n [minutes]) ), there are no blocking activities, the online index rebuild is executed immediately without waiting and the DDL statement is completed.

Restricciones de los índices espacialesSpatial Index Restrictions

Cuando se regenera un índice espacial, la tabla de usuario subyacente no está disponible mientras dura esta operación, porque el índice espacial tiene un bloqueo del esquema.When you rebuild a spatial index, the underlying user table is unavailable for the duration of the index operation because the spatial index holds a schema lock.

No se puede modificar la restricción PRIMARY KEY de la tabla de usuario mientras se define un índice espacial en una columna de esa tabla.The PRIMARY KEY constraint in the user table cannot be modified while a spatial index is defined on a column of that table. Para cambiar la restricción PRIMARY KEY, quite primero todos los índices espaciales de la tabla.To change the PRIMARY KEY constraint, first drop every spatial index of the table. Después de modificar la restricción PRIMARY KEY, puede volver a crear cada uno de los índices espaciales.After modifying the PRIMARY KEy constraint, you can re-create each of the spatial indexes.

No se puede especificar ningún índice espacial en una operación para volver a generar una partición única.In a single partition rebuild operation, you cannot specify any spatial indexes. Sin embargo, se pueden especificar índices espaciales cuando se regeneran todas las particiones.However, you can specify spatial indexes in a complete partition rebuild.

Para cambiar opciones específicas de un índice espacial, como BOUNDING_BOX o GRID, puede usar una instrucción CREATE SPATIAL INDEX que especifica DROP_EXISTING = ON, o quitar el índice espacial y crear uno nuevo.To change options that are specific to a spatial index, such as BOUNDING_BOX or GRID, you can either use a CREATE SPATIAL INDEX statement that specifies DROP_EXISTING = ON, or drop the spatial index and create a new one. Para ver un ejemplo, consulte CREATE SPATIAL INDEX (Transact-SQL).For an example, see CREATE SPATIAL INDEX (Transact-SQL).

Data CompressionData Compression

Para obtener más información sobre la compresión de datos, vea Compresión de datos.For a more information about data compression, see Data Compression.

Para evaluar el modo en que el cambio de compresión de PAGE y ROW afectará a una tabla, índice o partición, use el procedimiento almacenado sp_estimate_data_compression_savings.To evaluate how changing PAGE and ROW compression will affect a table, an index, or a partition, use the sp_estimate_data_compression_savings stored procedure.

Las restricciones siguientes se aplican a los índices con particiones:The following restrictions apply to partitioned indexes:

  • Al utilizar ALTER INDEX ALL..., no puede cambiar la configuración de compresión de una única partición si la tabla tiene índices no alineados.When you use ALTER INDEX ALL ..., you cannot change the compression setting of a single partition if the table has nonaligned indexes.
  • La sintaxis ALTER INDEX <index> ... REBUILD PARTITION ... vuelve a generar la partición especificada del índice.The ALTER INDEX <index> ... REBUILD PARTITION ... syntax rebuilds the specified partition of the index.
  • La sintaxis ALTER INDEX <index> ... REBUILD WITH ... vuelve a generar todas las particiones del índice.The ALTER INDEX <index> ... REBUILD WITH ... syntax rebuilds all partitions of the index.

EstadísticasStatistics

Cuando se ejecuta ALTER INDEX ALL ... en una tabla, solo se actualizan las estadísticas asociadas a índices.When you execute ALTER INDEX ALL ... on a table, only the statistics associates with indexes are updated. Las estadísticas automáticas o manuales creadas en la tabla (en lugar de en un índice) no se actualizan.Automatic or manual statistics created on the table (instead of an index) are not updated.

PermisosPermissions

Para ejecutar ALTER INDEX, se necesita, como mínimo, el permiso ALTER en la tabla o en la vista.To execute ALTER INDEX, at a minimum, ALTER permission on the table or view is required.

Notas de la versiónVersion Notes

  • SQL DatabaseSQL Database no usa opciones de grupo de archivos ni secuencia de archivos.does not use filegroup and filestream options.
  • Los índices de almacén de columnas no están disponibles en versiones anteriores a SQL Server 2012 (11.x)SQL Server 2012 (11.x).Columnstore indexes are not available prior to SQL Server 2012 (11.x)SQL Server 2012 (11.x).
  • Las operaciones de índice reanudables están disponibles a partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x) y SQL DatabaseSQL Database.Resumable index operations are available Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x) and SQL DatabaseSQL Database

Ejemplo de sintaxis básica:Basic syntax example:

ALTER INDEX index1 ON table1 REBUILD;  
  
ALTER INDEX ALL ON table1 REBUILD;  
  
ALTER INDEX ALL ON dbo.table1 REBUILD;  

Ejemplos: Índices de almacén de columnasExamples: Columnstore Indexes

Estos ejemplos se aplican a índices de almacén de columnas.These examples apply to columnstore indexes.

A.A. Demo de REORGANIZEREORGANIZE demo

En este ejemplo se muestra cómo funciona el comando ALTER INDEX REORGANIZE.This example demonstrates how the ALTER INDEX REORGANIZE command works. Se crea una tabla que tiene varios grupos de filas y, después, se muestra cómo REORGANIZE combina los grupos de filas.It creates a table that has multiple rowgroups, and then demonstrates how REORGANIZE merges the rowgroups.

-- Create a database   
CREATE DATABASE [ columnstore ];  
GO  
  
-- Create a rowstore staging table  
CREATE TABLE [ staging ] (  
     AccountKey              int NOT NULL,  
     AccountDescription      nvarchar (50),  
     AccountType             nvarchar(50),  
     AccountCodeAlternateKey     int  
     )  
  
-- Insert 10 million rows into the staging table.   
DECLARE @loop int  
DECLARE @AccountDescription varchar(50)  
DECLARE @AccountKey int  
DECLARE @AccountType varchar(50)  
DECLARE @AccountCode int  
  
SELECT @loop = 0  
BEGIN TRAN  
    WHILE (@loop < 300000)   
      BEGIN  
        SELECT @AccountKey = CAST (RAND()*10000000 as int);  
        SELECT @AccountDescription = 'accountdesc ' + CONVERT(varchar(20), @AccountKey);  
        SELECT @AccountType = 'AccountType ' + CONVERT(varchar(20), @AccountKey);  
        SELECT @AccountCode =  CAST (RAND()*10000000 as int);  
  
        INSERT INTO  staging VALUES (@AccountKey, @AccountDescription, @AccountType, @AccountCode);  
  
        SELECT @loop = @loop + 1;  
    END  
COMMIT  
  
-- Create a table for the clustered columnstore index  
  
CREATE TABLE cci_target (  
     AccountKey              int NOT NULL,  
     AccountDescription      nvarchar (50),  
     AccountType             nvarchar(50),  
     AccountCodeAlternateKey int  
     )  
  
-- Convert the table to a clustered columnstore index named inxcci_cci_target;  
CREATE CLUSTERED COLUMNSTORE INDEX idxcci_cci_target ON cci_target;  

Use la opción TABLOCK para insertar filas en paralelo.Use the TABLOCK option to insert rows in parallel. A partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x), la operación INSERT INTO se puede ejecutar en paralelo cuando se usa TABLOCK.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), the INSERT INTO operation can run in parallel when TABLOCK is used.

INSERT INTO cci_target WITH (TABLOCK) 
SELECT TOP 300000 * FROM staging;  

Ejecute este comando para ver los grupos de filas delta con estado OPEN.Run this command to see the OPEN delta rowgroups. El número de grupos de filas depende del grado de paralelismo.The number of rowgroups depends on the degree of parallelism.

SELECT *   
FROM sys.dm_db_column_store_row_group_physical_stats   
WHERE object_id  = object_id('cci_target');  

Ejecute este comando para forzar todos los grupos de filas con estado CLOSED y OPEN hacia el almacén de columnas.Run this command to force all CLOSED and OPEN rowgroups into the columnstore.

ALTER INDEX idxcci_cci_target ON cci_target REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);  

Vuelva a ejecutar este comando y verá que los grupos de filas más pequeños se combinan en un grupo de filas comprimido.Run this command again and you will see that smaller rowgroups are merged into one compressed rowgroup.

ALTER INDEX idxcci_cci_target ON cci_target REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);  

b.B. Comprimir grupos de filas delta con estado CLOSED en el almacén de columnasCompress CLOSED delta rowgroups into the columnstore

En este ejemplo se usa la opción REORGANIZE para comprimir cada grupo de filas delta con el estado CLOSED en el almacén de columnas como un grupo de filas comprimido.This example uses the REORGANIZE option to compresses each CLOSED delta rowgroup into the columnstore as a compressed rowgroup. Esta operación no es necesaria, pero es útil cuando el motor de tupla no comprime los grupos de filas CLOSED lo suficientemente rápido.This is not necessary, but is useful when the tuple-mover is not compressing CLOSED rowgroups fast enough.

-- Uses AdventureWorksDW  
-- REORGANIZE all partitions  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;  
  
-- REORGANIZE a specific partition  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0;  

C.C. Comprimir todos los grupos de filas delta con estado OPEN y CLOSED en el almacén de columnasCompress all OPEN AND CLOSED delta rowgroups into the columnstore

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x)) y SQL DatabaseSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x)) and SQL DatabaseSQL Database

El comando REORGANIZE WITH ( COMPRESS_ALL_ROW_GROUPS = ON ) comprime cada grupo de filas delta con los estados OPEN y CLOSED en el almacén de columnas como un grupo de filas comprimido.The command REORGANIZE WITH ( COMPRESS_ALL_ROW_GROUPS = ON ) compresses each OPEN and CLOSED delta rowgroup into the columnstore as a compressed rowgroup. Esto vacía el almacén delta y obliga a todas las filas a comprimirse en el almacén de columnas.This empties the deltastore and forces all rows to get compressed into the columnstore. Esto es útil sobre todo después de realizar muchas operaciones de inserción, ya que estas operaciones almacenan las filas en uno o varios grupos de filas delta.This is useful especially after performing many insert operations since these operations store the rows in one or more delta rowgroups.

REORGANIZE combina grupos de filas para rellenar los grupos de filas hasta un número máximo de filas <= 1 024 576.REORGANIZE combines rowgroups to fill rowgroups up to a maximum number of rows <= 1,024,576. Por tanto, al comprimir todos los grupos de filas OPEN y CLOSED, no terminará con una gran cantidad de grupos de filas comprimidos que solo tengan algunas filas en ellos.Therefore, when you compress all OPEN and CLOSED rowgroups you won't end up with lots of compressed rowgroups that only have a few rows in them. Es preferible que los grupos de filas estén lo más llenos posible para reducir el tamaño comprimido y mejorar el rendimiento de las consultas.You want rowgroups to be as full as possible to reduce the compressed size and improve query performance.

-- Uses AdventureWorksDW2016  
-- Move all OPEN and CLOSED delta rowgroups into the columnstore.  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);  
  
-- For a specific partition, move all OPEN AND CLOSED delta rowgroups into the columnstore  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0 WITH (COMPRESS_ALL_ROW_GROUPS = ON);  

D.D. Desfragmentar un índice de almacén de columnas en líneaDefragment a columnstore index online

No se aplica a: SQL Server 2012 (11.x)SQL Server 2012 (11.x) y SQL Server 2014 (12.x)SQL Server 2014 (12.x).Does not apply to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) and SQL Server 2014 (12.x)SQL Server 2014 (12.x).

A partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x), con REORGANIZE se consigue hacer mucho más que comprimir grupos de filas delta en el almacén de columnas:Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), REORGANIZE does more than compress delta rowgroups into the columnstore. también realiza desfragmentación en línea.It also performs online defragmentation. Primero reduce el tamaño del almacén de columnas. Para ello, quita físicamente las filas eliminadas cuando se ha eliminado al menos un 10 % o más de las filas de un grupo de filas.First, it reduces the size of the columnstore by physically removing deleted rows when 10% or more of the rows in a rowgroup have been deleted. Después, combina grupos de filas para formar grupos de filas de mayor tamaño que tengan hasta un máximo de 1 024 576 filas por grupos de filas.Then, it combines rowgroups together to form larger rowgroups that have up to the maximum of 1,024,576 rows per rowgroups. Todos los grupos de filas que se cambian se vuelven a comprimir.All rowgroups that are changed get re-compressed.

Nota

A partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x), ya no será necesario volver a regenerar un índice de almacén de columnas en la mayoría de los casos, ya que REORGANIZE quita físicamente las filas eliminadas y combina los grupos de filas.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), rebuilding a columnstore index is no longer necessary in most situations since REORGANIZE physically removes deleted rows and merges rowgroups. La opción COMPRESS_ALL_ROW_GROUPS fuerza todos los grupos de filas delta con el estado OPEN y CLOSED hacia el almacén de columnas, lo que antes solo se podía realizar mediante una regeneración.The COMPRESS_ALL_ROW_GROUPS option forces all OPEN or CLOSED delta rowgroups into the columnstore which previously could only be done with a rebuild. REORGANIZE se ejecuta en línea y en segundo plano, por lo que las consultas pueden seguir haciéndose mientras se realiza la operación.REORGANIZE is online and occurs in the background so queries can continue as the operation happens.

-- Uses AdventureWorks  
-- Defragment by physically removing rows that have been logically deleted from the table, and merging rowgroups.  
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;  

E.E. Regenerar un índice de almacén de columnas agrupado sin conexiónRebuild a clustered columnstore index offline

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x))Applies to: SQL ServerSQL Server (Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x))

Sugerencia

A partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x) y en Base de datos SQL de AzureAzure SQL Database, se recomienda usar ALTER INDEX REORGANIZE en lugar de ALTER INDEX REBUILD.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) and in Base de datos SQL de AzureAzure SQL Database, we recommend using ALTER INDEX REORGANIZE instead of ALTER INDEX REBUILD.

Nota

En SQL Server 2012 (11.x)SQL Server 2012 (11.x) y SQL Server 2014 (12.x)SQL Server 2014 (12.x), REORGANIZE solo se usa para comprimir los grupos de filas CLOSED en el almacén de columnas.In SQL Server 2012 (11.x)SQL Server 2012 (11.x) and SQL Server 2014 (12.x)SQL Server 2014 (12.x), REORGANIZE is only used to compress CLOSED rowgroups into the columnstore. La única manera de realizar operaciones de desfragmentación y forzar todos los grupos de filas delta hacia el almacén de columnas es regenerar el índice.The only way to perform defragmentation operations and to force all delta rowgroups into the columnstore is to rebuild the index.

En este ejemplo se muestra cómo regenerar un índice de almacén de columnas agrupado y forzar todos los grupos de filas delta hacia el almacén de columnas.This example shows how to rebuild a clustered columnstore index and force all delta rowgroups into the columnstore. Este primer paso prepara una tabla FactInternetSales2 con un índice de almacén de columnas clúster e inserta los datos de las primeras cuatro columnas.This first step prepares a table FactInternetSales2 with a clustered columnstore index and inserts data from the first four columns.

-- Uses AdventureWorksDW  
  
CREATE TABLE dbo.FactInternetSales2 (  
    ProductKey [int] NOT NULL,   
    OrderDateKey [int] NOT NULL,   
    DueDateKey [int] NOT NULL,   
    ShipDateKey [int] NOT NULL);  
  
CREATE CLUSTERED COLUMNSTORE INDEX cci_FactInternetSales2  
ON dbo.FactInternetSales2;  
  
INSERT INTO dbo.FactInternetSales2  
SELECT ProductKey, OrderDateKey, DueDateKey, ShipDateKey  
FROM dbo.FactInternetSales;  
  
SELECT * FROM sys.column_store_row_groups;  

Los resultados muestran que hay un grupo de filas OPEN, lo que significa que SQL ServerSQL Server esperará a que se agreguen más filas antes de cerrar el grupo de filas y moverá los datos al almacén de columnas.The results show there is one OPEN rowgroup, which means SQL ServerSQL Server will wait for more rows to be added before it closes the rowgroup and moves the data to the columnstore. La siguiente instrucción regenera el índice de almacén de columnas agrupado, lo cual fuerza todas las filas hacia el almacén de columnas.This next statement rebuilds the clustered columnstore index, which forces all rows into the columnstore.

ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REBUILD;  
SELECT * FROM sys.column_store_row_groups;  

Los resultados de la instrucción SELECT muestran que el grupo de filas es COMPRESSED, lo que significa que los segmentos de la columna del grupo de filas ahora están comprimidos y .almacenados en el almacén de columnas.The results of the SELECT statement show the rowgroup is COMPRESSED, which means the column segments of the rowgroup are now compressed and stored in the columnstore.

F.F. Regenerar una partición de un índice de almacén de columnas agrupado sin conexiónRebuild a partition of a clustered columnstore index offline

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2012 (11.x)SQL Server 2012 (11.x))Applies to: SQL ServerSQL Server (Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x))

Para regenerar una partición de un índice de almacén de columnas agrupado de gran tamaño, use ALTER INDEX REBUILD con la opción de partición.To rebuild a partition of a large clustered columnstore index, use ALTER INDEX REBUILD with the partition option. En este ejemplo se regenera la partición 12.This example rebuilds partition 12. A partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x), se recomienda reemplazar REBUILD con REORGANIZE.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), we recommend replacing REBUILD with REORGANIZE.

ALTER INDEX cci_fact3   
ON fact3  
REBUILD PARTITION = 12;  

G.G. Cambiar un índice de almacén de columnas agrupado para usar la compresión de archivoChange a clustered columstore index to use archival compression

No se aplica a: SQL Server 2012 (11.x)SQL Server 2012 (11.x)Does not apply to: SQL Server 2012 (11.x)SQL Server 2012 (11.x)

Puede optar por reducir aún más el tamaño de un índice de almacén de columnas agrupado mediante la opción de compresión de datos COLUMNSTORE_ARCHIVE.You can choose to reduce the size of a clustered columnstore index even further by using the COLUMNSTORE_ARCHIVE data compression option. Esto resulta práctico para datos más antiguos que prefiere mantener en un almacenamiento más económico.This is practical for older data that you want to keep on cheaper storage. Se recomienda usarlo solamente en datos a los que no se acceda con frecuencia, ya que la descompresión es más lenta que la compresión de COLUMNSTORE normal.We recommend only using this on data that is not accessed often since decompress is slower than with the normal COLUMNSTORE compression.

En el ejemplo siguiente se vuelve a generar un índice de almacén de columnas clúster para usar la compresión archivada y, a continuación, se muestra cómo quitar la compresión de archivo.The following example rebuilds a clustered columnstore index to use archival compression, and then shows how to remove the archival compression. El resultado final usará solo la compresión de almacén de columnas.The final result will use only columnstore compression.

--Prepare the example by creating a table with a clustered columnstore index.  
CREATE TABLE SimpleTable (  
    ProductKey [int] NOT NULL,   
    OrderDateKey [int] NOT NULL,   
    DueDateKey [int] NOT NULL,   
    ShipDateKey [int] NOT NULL  
);  
  
CREATE CLUSTERED INDEX cci_SimpleTable ON SimpleTable (ProductKey);  
  
CREATE CLUSTERED COLUMNSTORE INDEX cci_SimpleTable  
ON SimpleTable  
WITH (DROP_EXISTING = ON);  
  
--Compress the table further by using archival compression.  
ALTER INDEX cci_SimpleTable ON SimpleTable  
REBUILD  
WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);  
  
--Remove the archive compression and only use columnstore compression.  
ALTER INDEX cci_SimpleTable ON SimpleTable  
REBUILD  
WITH (DATA_COMPRESSION = COLUMNSTORE);  
GO  

Ejemplos: Índices de almacén de filasExamples: Rowstore indexes

A.A. Volver a generar un índiceRebuilding an index

En el siguiente ejemplo se regenera un único índice en la tabla Employee de la base de datos AdventureWorks2012AdventureWorks2012.The following example rebuilds a single index on the Employee table in the AdventureWorks2012AdventureWorks2012 database.

ALTER INDEX PK_Employee_EmployeeID ON HumanResources.Employee REBUILD;  

b.B. Volver a generar todos los índices de una tabla y especificar opcionesRebuilding all indexes on a table and specifying options

En el siguiente ejemplo se especifica la palabra clave ALL.The following example specifies the keyword ALL. Esto vuelve a generar todos los índices asociados a la tabla Production.Product en la base de datos AdventureWorks2012AdventureWorks2012.This rebuilds all indexes associated with the table Production.Product in the AdventureWorks2012AdventureWorks2012 database. Se especifican tres opciones.Three options are specified.

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

ALTER INDEX ALL ON Production.Product  
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON);  

El ejemplo siguiente agrega la opción ONLINE, incluida la opción de bloqueo de prioridad baja, y agrega la opción de compresión de fila.The following example adds the ONLINE option including the low priority lock option, and adds the row compression option.

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x)) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x)) and SQL DatabaseSQL Database.

ALTER INDEX ALL ON Production.Product  
REBUILD WITH   
(  
    FILLFACTOR = 80,   
    SORT_IN_TEMPDB = ON,  
    STATISTICS_NORECOMPUTE = ON,  
    ONLINE = ON ( WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 4 MINUTES, ABORT_AFTER_WAIT = BLOCKERS ) ),   
    DATA_COMPRESSION = ROW  
);  

C.C. Reorganizar un índice con compactación LOBReorganizing an index with LOB compaction

En el siguiente ejemplo se reorganiza un único índice clúster en la base de datos AdventureWorks2012AdventureWorks2012.The following example reorganizes a single clustered index in the AdventureWorks2012AdventureWorks2012 database. Dado que el índice contiene un tipo de datos LOB en el nivel hoja, la instrucción también compacta todas las páginas que contienen datos de objetos grandes.Because the index contains a LOB data type in the leaf level, the statement also compacts all pages that contain the large object data. Observe que no es necesario especificar la opción WITH (LOB_COMPACTION = ON) porque el valor predeterminado es ON.Note that specifying the WITH (LOB_COMPACTION = ON) option is not required because the default value is ON.

ALTER INDEX PK_ProductPhoto_ProductPhotoID ON Production.ProductPhoto REORGANIZE WITH (LOB_COMPACTION = ON);  

D.D. Establecer opciones en un índiceSetting options on an index

En el siguiente ejemplo se establecen varias opciones en el índice AK_SalesOrderHeader_SalesOrderNumber en la base de datos AdventureWorks2012AdventureWorks2012.The following example sets several options on the index AK_SalesOrderHeader_SalesOrderNumber in the AdventureWorks2012AdventureWorks2012 database.

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2008SQL Server 2008) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2008SQL Server 2008) and SQL DatabaseSQL Database.

ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON  
    Sales.SalesOrderHeader  
SET (  
    STATISTICS_NORECOMPUTE = ON,  
    IGNORE_DUP_KEY = ON,  
    ALLOW_PAGE_LOCKS = ON  
    ) ;  
GO

E.E. Deshabilitar un índiceDisabling an index

En el siguiente ejemplo se deshabilita un índice no clúster de la tabla Employee en la base de datos AdventureWorks2012AdventureWorks2012.The following example disables a nonclustered index on the Employee table in the AdventureWorks2012AdventureWorks2012 database.

ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee DISABLE;

F.F. Deshabilitar restriccionesDisabling constraints

En este ejemplo se deshabilita una restricción PRIMARY KEY al deshabilitar el índice PRIMARY KEY en la base de datos AdventureWorks2012AdventureWorks2012.The following example disables a PRIMARY KEY constraint by disabling the PRIMARY KEY index in the AdventureWorks2012AdventureWorks2012 database. La restricción FOREIGN KEY de la tabla subyacente se deshabilita automáticamente y aparece un mensaje de advertencia.The FOREIGN KEY constraint on the underlying table is automatically disabled and warning message is displayed.

ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department DISABLE;  

El conjunto de resultados devuelve este mensaje de advertencia.The result set returns this warning message.

Warning: Foreign key 'FK_EmployeeDepartmentHistory_Department_DepartmentID'  
on table 'EmployeeDepartmentHistory' referencing table 'Department'  
was disabled as a result of disabling the index 'PK_Department_DepartmentID'.

G.G. Habilitar restriccionesEnabling constraints

En el siguiente ejemplo se habilitan las restricciones PRIMARY KEY y FOREIGN KEY deshabilitadas en el ejemplo F.The following example enables the PRIMARY KEY and FOREIGN KEY constraints that were disabled in Example F.

La restricción PRIMARY KEY se habilita al volver a generar el índice PRIMARY KEY.The PRIMARY KEY constraint is enabled by rebuilding the PRIMARY KEY index.

ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department REBUILD;  

A continuación, se habilita la restricción FOREIGN KEY.The FOREIGN KEY constraint is then enabled.

ALTER TABLE HumanResources.EmployeeDepartmentHistory  
CHECK CONSTRAINT FK_EmployeeDepartmentHistory_Department_DepartmentID;  
GO  

H.H. Volver a generar un índice con particionesRebuilding a partitioned index

En el siguiente ejemplo se vuelve a generar una única partición, el número de partición 5, del índice con particiones IX_TransactionHistory_TransactionDate de la base de datos AdventureWorks2012AdventureWorks2012.The following example rebuilds a single partition, partition number 5, of the partitioned index IX_TransactionHistory_TransactionDate in the AdventureWorks2012AdventureWorks2012 database. La partición 5 se vuelve a generar en línea y el tiempo de espera de 10 minutos para el bloqueo de prioridad baja se aplica independientemente a cada bloqueo adquirido por la operación de regeneración de índice.Partition 5 is rebuilt online and the 10 minutes wait time for the low priority lock applies separately to every lock acquired by index rebuild operation. Si, durante este tiempo, el bloqueo no se puede obtener para completar la regeneración del índice, la instrucción de operación de la regeneración se anula.If during this time the lock cannot be obtained to complete index rebuild, the rebuild operation statement is aborted.

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2014 (12.x)SQL Server 2014 (12.x)) y SQL DatabaseSQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2014 (12.x)SQL Server 2014 (12.x)) and SQL DatabaseSQL Database.

-- Verify the partitioned indexes.  
SELECT *  
FROM sys.dm_db_index_physical_stats (DB_ID(),OBJECT_ID(N'Production.TransactionHistory'), NULL , NULL, NULL);  
GO  
--Rebuild only partition 5.  
ALTER INDEX IX_TransactionHistory_TransactionDate  
ON Production.TransactionHistory  
REBUILD Partition = 5   
   WITH (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 10 minutes, ABORT_AFTER_WAIT = SELF)));  
GO  

I.I. Cambiar la configuración de compresión de un índiceChanging the compression setting of an index

En el ejemplo siguiente se vuelve a generar un índice en una tabla de almacén de filas sin particiones.The following example rebuilds an index on a nonpartitioned rowstore table.

ALTER INDEX IX_INDEX1   
ON T1  
REBUILD   
WITH (DATA_COMPRESSION = PAGE);  
GO  

Para obtener más ejemplos de compresión de datos, vea Compresión de datos.For additional data compression examples, see Data Compression.

J.J. Regeneración de índice reanudable en líneaOnline resumable index rebuild

Se aplica a: SQL ServerSQL Server (a partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x)) y SQL DatabaseSQL DatabaseApplies to: SQL ServerSQL Server (Starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and SQL DatabaseSQL Database

En estos ejemplos se muestra cómo usar la regeneración de índice reanudable en línea.The following examples show how to use online resumable index rebuild.

  1. Ejecute una regeneración de índice en línea como una operación reanudable con MAXDOP=1.Execute an online index rebuild as resumable operation with MAXDOP=1.

    ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE=ON, MAXDOP=1, RESUMABLE=ON) ;
    
  2. Al volver a ejecutar el mismo comando (véase más arriba) después de pausar una operación de índice, se reanuda automáticamente la operación de regeneración de índice.Executing the same command again (see above) after an index operation was paused, resumes automatically the index rebuild operation.

  3. Ejecute una regeneración de índice en línea como una operación reanudable con MAX_DURATION establecido en 240 minutos.Execute an online index rebuild as resumable operation with MAX_DURATION set to 240 minutes.

    ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE=ON, RESUMABLE=ON, MAX_DURATION=240) ; 
    
  4. Pause una operación de regeneración de índice en línea reanudable que se esté ejecutando.Pause a running resumable online index rebuild.

    ALTER INDEX test_idx on test_table PAUSE ;
    
  5. Reanude una regeneración de índice en línea para una regeneración de índice que se ejecutó como una operación reanudable, especificando un nuevo valor de MAXDOP en 4.Resume an online index rebuild for an index rebuild that was executed as resumable operation specifying a new value for MAXDOP set to 4.

    ALTER INDEX test_idx on test_table RESUME WITH (MAXDOP=4) ;
    
  6. Reanude una operación de regeneración de índice en línea para una regeneración de índice en línea que se ejecutó como reanudable.Resume an online index rebuild operation for an index online rebuild that was executed as resumable. Establezca MAXDOP en 2, defina el tiempo de ejecución del índice que se está ejecutando como reanudable en 240 minutos y, en el caso de un índice que se está bloqueando, espere 10 minutos y después elimine todos los bloqueadores.Set MAXDOP to 2, set the execution time for the index being running as resmumable to 240 minutes and in case of an index being blocked on the lock wait 10 minutes and after that kill all blockers.

       ALTER INDEX test_idx on test_table  
          RESUME WITH (MAXDOP=2, MAX_DURATION= 240 MINUTES, 
          WAIT_AT_LOW_PRIORITY (MAX_DURATION=10, ABORT_AFTER_WAIT=BLOCKERS)) ;
    
  7. Anular la operación de regeneración del índice reanudables que se está ejecutando o en pausa.Abort resumable index rebuild operation which is running or paused.

    ALTER INDEX test_idx on test_table ABORT ;
    

Consulte tambiénSee Also

CREATE INDEX (Transact-SQL) CREATE INDEX (Transact-SQL)
CREATE SPATIAL INDEX (Transact-SQL) CREATE SPATIAL INDEX (Transact-SQL)
CREATE XML INDEX (Transact-SQL) CREATE XML INDEX (Transact-SQL)
DROP INDEX (Transact-SQL) DROP INDEX (Transact-SQL)
Deshabilitar índices y restricciones Disable Indexes and Constraints
Índices XML (SQL Server) XML Indexes (SQL Server)
Realizar operaciones de índice en línea Perform Index Operations Online
Reorganizar y volver a generar índices Reorganize and Rebuild Indexes
sys.dm_db_index_physical_stats (Transact-SQL) sys.dm_db_index_physical_stats (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)