ALTER INDEX (Transact-SQL)
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Base de datos SQL de Microsoft Fabric
Modifica un índice existente de una tabla o una vista (almacén de filas, almacén de columnas o XML) mediante su deshabilitación, regeneración o reorganización, o mediante el establecimiento de sus opciones.
Convenciones de sintaxis de Transact-SQL
Sintaxis
Sintaxis para SQL Server, Azure SQL Database y Azure SQL Instancia administrada.
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_option> [ , ...n ] ) ]
| PAUSE
| ABORT
}
[ ; ]
<object> ::=
{
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_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
| DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { <partition_number> [ TO <partition_number> ] } [ , ...n ] ) ]
| XML_COMPRESSION = { ON | OFF }
[ 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 }
| XML_COMPRESSION = { ON | OFF }
| 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 }
| OPTIMIZE_FOR_SEQUENTIAL_KEY = { 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 } )
}
Sintaxis de Azure Synapse Analytics and Analytics Platform System (PDW).
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 ] ) ]
| XML_COMPRESSION = { ON | OFF }
[ ON PARTITIONS ( { <partition_number> [ TO <partition_number> ] } [ , ...n ] ) ]
}
<single_partition_rebuild_index_option> ::=
{
DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
| XML_COMPRESSION = { ON | OFF }
}
Argumentos
index_name
El nombre del índice. Los nombres de índice deben ser únicos en una tabla o vista, pero no es necesario que sean únicos en una base de datos. Los nombres de índice deben seguir las reglas de los identificadores.
ALL
Especifica todos los índices asociados a la tabla o vista independientemente del tipo de índice. Especificar ALL
hace que se produzca un error en la instrucción si uno o varios índices están en un grupo de archivos sin conexión o de solo lectura o la operación especificada no se permite en uno o varios tipos de índice. En la siguiente tabla se enumeran las operaciones de índice y los tipos de índices no permitidos.
Uso de la palabra clave ALL con esta operación |
Se produce un error si la tabla tiene uno o más |
---|---|
REBUILD WITH ONLINE = ON |
Índice XML Índice espacial Índice de almacén de columnas solo en SQL Server 2017 (14.x) y versiones anteriores. Las versiones posteriores admiten la recompilación en línea de los índices de almacén de columnas. |
REBUILD PARTITION = <partition_number> |
Índice sin particiones, índice XML, índice espacial o índice deshabilitado |
REORGANIZE |
Índices con ALLOW_PAGE_LOCKS establecido en OFF |
REORGANIZE PARTITION = <partition_number> |
Índice sin particiones, índice XML, índice espacial o índice deshabilitado |
IGNORE_DUP_KEY = ON |
Índice XML Índice espacial Índice de almacén de columnas 1 |
ONLINE = ON |
Índice XML Índice espacial Índice de almacén de columnas 1 |
RESUMABLE = ON |
No se admiten índices reanudables con la palabra clave ALL |
Si ALL
se especifica con PARTITION = <partition_number>
, se deben alinear todos los índices. Esto significa que se crean particiones basadas en las funciones de partición equivalentes. El uso ALL
de con PARTITION
hace que todas las particiones de índice con la misma <partition_number>
se vuelvan a generar o reorganizar. Para obtener más información sobre los índices con particiones, vea Tablas e índices con particiones.
Para obtener más información sobre las operaciones de índice en línea, consulte Directrices para las operaciones de índice en línea.
database_name
El nombre de la base de datos.
schema_name
Nombre del esquema al que pertenece la tabla o la vista.
table_or_view_name
Nombre de la tabla o vista asociada al índice. Para ver los detalles del índice de una tabla o vista, use la vista de catálogo sys.indexes.
Azure SQL Database admite el formato de nombre de tres partes <database_name>.<schema_name>.<object_name>
cuando <database_name>
es el nombre de la base de datos actual o <database_name>
es tempdb
y <object_name>
comienza con #
o ##
. Si el nombre del esquema es dbo
, se puede omitir <schema_name>
.
REBUILD [ WITH ( <rebuild_index_option> [ ,... n ] ) ]
se aplica a: SQL Server 2012 (11.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Especifica que el índice se vuelve a generar con las mismas columnas, tipo de índice, atributo de unicidad y criterio de ordenación.
REBUILD
habilita un índice deshabilitado. La regeneración de un índice clúster no vuelve a generar índices no clúster asociados a menos que se especifique la palabra clave ALL
. Si no se especifican opciones de índice, se aplican los valores de opción de índice existentes en sys.indexes. Para cualquier opción de índice cuyo valor no aparezca en sys.indexes
, se aplica el valor predeterminado indicado en la definición de argumento de la opción.
Si se especifica ALL
y la tabla subyacente es un montón, la operación de recompilación no tiene ningún efecto en el montón. Se regeneran los índices no clúster asociados a la tabla.
La operación de REBUILD
se puede registrar mínimamente si el modelo de recuperación de la base de datos se registra masivamente o es sencillo.
Cuando se regenera un índice XML principal, la tabla de usuario subyacente no está disponible mientras dura esta operación.
En el caso de los índices de almacén de columnas, la operación de recompilación:
- Vuelve a comprimir todos los datos del almacén de columnas. Existen dos copias del índice de almacén de columnas mientras la operación de recompilación está en curso. Cuando finalice la recompilación, motor de base de datos elimina el índice de almacén de columnas original.
- No conserva el criterio de ordenación, si existe. Para recompilar un índice de almacén de columnas y conservar o introducir un criterio de ordenación, use la instrucción
CREATE [CLUSTERED] COLUMNSTORE INDEX ... ORDER (...) ... WITH (DROP_EXISTING = ON)
.
Para más información, consulte Optimización del mantenimiento de índices para mejorar el rendimiento de las consultas y reducir el consumo de recursos.
PARTITION
Especifica que solo se recompila o reorganiza una partición de un índice.
PARTITION
no se puede especificar si index_name no es un índice con particiones.
PARTITION = ALL
vuelve a generar todas las particiones.
Advertencia
Es posible crear y volver a generar índices no alineados en una tabla con más de 1000 particiones, pero no se admite. Si lo hace, puede provocar un rendimiento degradado o un consumo excesivo de memoria durante estas operaciones. Microsoft recomienda usar solo índices alineados cuando el número de particiones supere los 1000.
partition_number
Número de partición de un índice con particiones que se va a recompilar o a reorganizar. partition_number es una expresión constante que puede hacer referencia a variables. Estas incluyen funciones o variables de tipo definidas por el usuario y funciones definidas por el usuario, pero no pueden hacer referencia a una instrucción de Transact-SQL. partition_number debe existir; de lo contrario, se producirá un error en la instrucción.
WITH ( <single_partition_rebuild_index_option> )
SORT_IN_TEMPDB
,MAXDOP
,DATA_COMPRESSION
yXML_COMPRESSION
son las opciones que se pueden especificar al recompilar una sola partición mediante la sintaxis de(PARTITION = partition_number)
. Los índices XML no se pueden especificar en una sola operación de recompilación de particiones.
DISABLE
Marca el índice como deshabilitado y no disponible para el Motor de base de datos. Cualquier índice puede estar deshabilitado. La definición de índice de un índice deshabilitado se conserva en el catálogo del sistema sin datos del índice subyacente. La deshabilitación de un índice clúster evita que los usuarios obtengan acceso a los datos de la tabla subyacente. Para habilitar un índice, use ALTER INDEX REBUILD
o CREATE INDEX WITH DROP_EXISTING
. Para obtener más información, vea Deshabilitar índices y restricciones y Habilitar índices y restricciones.
REORGANIZE para índices de almacén de filas
En el caso de los índices de almacén de filas, REORGANIZE
especifica reorganizar el nivel hoja del índice. La REORGANIZE
operación es:
- Siempre se realiza en línea. Esto significa que los bloqueos de tabla a largo plazo no se mantienen y las consultas o actualizaciones de los datos de la tabla subyacente pueden continuar durante la transacción de
ALTER INDEX REORGANIZE
. - No se permite para un índice deshabilitado.
- No se permite cuando
ALLOW_PAGE_LOCKS
se establece enOFF
. - No se revierte cuando se realiza dentro de una transacción y se revierte la transacción.
Nota
Cuando ALTER INDEX REORGANIZE
usa transacciones explícitas (por ejemplo, ALTER INDEX
dentro de BEGIN TRAN ... COMMIT/ROLLBACK
), en lugar del modo de transacción implícita predeterminado, el comportamiento de bloqueo de REORGANIZE
es más restrictivo, lo que puede provocar un bloqueo. Para obtener más información sobre las transacciones implícitas, consulte SET IMPLICIT_TRANSACTIONS.
Para más información, consulte Optimización del mantenimiento de índices para mejorar el rendimiento de las consultas y reducir el consumo de recursos.
REORGANIZE WITH ( LOB_COMPACTION = { ON | OFF } )
Se aplica a índices de almacén de filas.
ACTIVAR
- 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. Compactar estos datos puede reducir el tamaño de los datos en disco.
- Para un índice agrupado, se compactan todas las columnas LOB que figuran en la tabla.
- Para un índice no agrupado, se compactan todas las columnas LOB que son columnas sin clave (incluidas) en el índice.
-
REORGANIZE ALL
realiza la compactación de LOB en todos los índices. 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.
Apagado
- Las páginas que contienen datos de objetos grandes no se compactan.
- OFF no tiene ningún efecto en un montón.
REORGANIZE para índices de almacén de columnas
En el caso de los índices de almacén de columnas, REORGANIZE
comprime cada grupo de filas delta cerrado en el almacén de columnas como un grupo de filas comprimido. La operación REORGANIZE
siempre se realiza en línea. 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
.
Para más información, consulte Optimización del mantenimiento de índices para mejorar el rendimiento de las consultas y reducir el consumo de recursos.
-
REORGANIZE
no es necesario para mover los grupos de filas delta cerrados a grupos de filas comprimidos. El proceso de tupla-mover (TM) de fondo se reactiva periódicamente para comprimir los grupos de filas delta cerrados. Se recomienda usarREORGANIZE
cuando tupla-mover se está retrasando.REORGANIZE
puede comprimir grupos de filas de forma más agresiva. - Para comprimir todos los grupos de filas abiertos y cerrados, consulte el REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS).
En el caso de los índices de almacén de columnas en SQL Server 2016 (13.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL, REORGANIZE
realiza las siguientes optimizaciones de desfragmentación adicionales en línea:
Quita físicamente las filas eliminadas de un grupo de filas cuando se han eliminado lógicamente 10% o más de las filas. Los bytes eliminados se reclaman en los medios físicos. Por ejemplo, si un grupo de filas comprimido de 1 millón de filas tiene 100 000 filas eliminadas, el motor de base de datos quita las filas eliminadas y vuelve a comprimir el grupo de filas con 900 000 filas.
Combina uno o varios grupos de filas comprimidos para aumentar las filas por grupo de filas, hasta alcanzar el máximo de 1 048 576 filas. Por ejemplo, si importa de forma masiva 5 lotes de 102 400 filas, obtendrá 5 grupos de filas comprimidos. Si ejecuta
REORGANIZE
, estos grupos de filas se combinan en 1 grupo de filas comprimido con 512 000 filas. Esto supone que no hay limitaciones de tamaño de diccionario ni memoria.En el caso de los grupos de filas en los que se han eliminado lógicamente 10% o más de las filas, el motor de base de datos intenta combinar este grupo de filas con uno o varios grupos de filas. 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. El grupo de filas 21 tiene el 60 % de las filas eliminadas, lo que deja 409 830 filas. El motor de base de datos favorece la combinación de estos dos grupos de filas para comprimir un nuevo grupo de filas que tiene 909 830 filas.
REORGANIZE WITH ( COMPRESS_ALL_ROW_GROUPS = { ON | OFF } )
Se aplica a los índices de almacén de columnas.
se aplica a: SQL Server 2016 (13.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
COMPRESS_ALL_ROW_GROUPS
proporciona una manera de forzar grupos de filas delta abiertos o cerrados en el almacén de columnas. Con esta opción, no es necesario recompilar el índice de almacén de columnas para vaciar los grupos de filas delta. Combinado con las otras características de desfragmentación de eliminación y combinación, esto hace que ya no sea necesario volver a generar un índice de almacén de columnas en la mayoría de las situaciones.
ACTIVAR
Fuerza todos los grupos de filas en el almacén de columnas, independientemente del tamaño y el estado (cerrados o abiertos).
Apagado
Fuerza todos los grupos de filas cerrados al almacén de columnas.
Para más información, consulte Optimización del mantenimiento de índices para mejorar el rendimiento de las consultas y reducir el consumo de recursos.
SET ( <opción> set_index [ ,... n ] )
Modifica las opciones de índice sin volver a generar ni reorganizar el índice.
SET
no se puede especificar para un índice deshabilitado.
PAD_INDEX = { ON | OFF }
Especifica el relleno del índice. El valor predeterminado es OFF
.
ACTIVAR
El porcentaje de espacio libre especificado por factor de relleno se aplica a las páginas de nivel intermedio del índice. Si no se especifica
FILLFACTOR
al mismo tiempoPAD_INDEX
se establece enON
, se usa el valor de factor de relleno en sys.indexes.Apagado
Las páginas de nivel intermedio se rellenan a una capacidad cercana, dejando espacio suficiente para al menos una fila del tamaño máximo que puede tener el índice, teniendo en cuenta el conjunto de claves en las páginas intermedias. Esto también ocurre si
PAD_INDEX
se establece enON
pero no se especifica el factor de relleno.
Para obtener más información, vea CREATE INDEX.
FILLFACTOR = fillfactor
Especifica un porcentaje que indica cuánto debe llenar el Motor de base de datos el nivel hoja de cada página de índice durante la creación o modificación de los índices. El valor de fillfactor debe ser un entero comprendido entre 1 y 100. El valor predeterminado es 0. Los valores de fill factor 0 y 100 son idénticos.
Un valor FILLFACTOR
explícito solo se aplica la primera vez que se crea o se vuelve a generar el índice. El motor de base de datos no mantiene dinámicamente el porcentaje especificado de espacio disponible de las páginas. Para obtener más información, vea CREATE INDEX.
Para ver el valor de factor de relleno, use fill_factor
en sys.indexes
.
Importante
La creación de un índice con un FILLFACTOR
inferior a 100 aumenta la cantidad de espacio de almacenamiento que ocupan los datos porque el motor de base de datos redistribuye los datos según el factor de relleno cuando crea o vuelve a generar un índice.
SORT_IN_TEMPDB = { ON | OFF }
Especifica si se van a almacenar resultados de ordenación temporales en tempdb
. El valor predeterminado es OFF
excepto hiperescala de Azure SQL Database. Para todas las operaciones de compilación de índices en Hiperescala, SORT_IN_TEMPDB
siempre se ON
a menos que se use una compilación de índice reanudable. Para las compilaciones de índices reanudables, SORT_IN_TEMPDB
siempre se OFF
.
ACTIVAR
Los resultados de ordenación intermedios que se usan para compilar el índice se almacenan en
tempdb
. Esto puede reducir el tiempo necesario para crear un índice. Sin embargo, esto aumenta la cantidad de espacio en disco utilizado durante la generación del índice.Apagado
Los resultados de orden intermedios se almacenan en la misma base de datos que el índice.
Si no es necesario realizar una operación de ordenación o si esta pueda realizarse en la memoria, se omite la opción SORT_IN_TEMPDB
.
Para obtener más información, consulte SORT_IN_TEMPDB opción para índices.
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. La opción IGNORE_DUP_KEY
se aplica solamente a operaciones de inserción realizadas tras crear o volver a generar el índice. El valor predeterminado es OFF
.
ACTIVAR
Se produce un mensaje de advertencia cuando se inserten valores de clave duplicados en un índice único. Solo las filas que infringen la restricción de unicidad no se insertan.
Apagado
Se produce un mensaje de error cuando se insertan valores de clave duplicados en un índice único. Toda
INSERT
la operación se revierte.
IGNORE_DUP_KEY
no se puede establecer ON
en para los índices creados en una vista, índices no únicos, índices XML, índices espaciales e índices filtrados.
Para ver la configuración de IGNORE_DUP_KEY
para un índice, use la columna ignore_dup_key
en la vista de catálogo sys.indexes de .
En la sintaxis compatible con versiones anteriores, WITH IGNORE_DUP_KEY
es equivalente a WITH IGNORE_DUP_KEY = ON
.
STATISTICS_NORECOMPUTE = { ON | OFF }
Deshabilite o habilite la opción de actualización automática de estadísticas, AUTO_STATISTICS_UPDATE
, para las estadísticas del índice. El valor predeterminado es OFF
.
ACTIVAR
Las actualizaciones automáticas de estadísticas se deshabilitan después de volver a generar el índice.
Apagado
Las actualizaciones automáticas de estadísticas se habilitan después de volver a generar el índice.
Para restaurar la actualización automática de estadísticas, establezca en STATISTICS_NORECOMPUTE
OFF
o ejecute UPDATE STATISTICS
sin la NORECOMPUTE
cláusula .
Advertencia
Si deshabilita la recomputación automática de estadísticas estableciendo STATISTICS_NORECOMPUTE = ON
, es posible que impida que el optimizador de consultas elija planes de ejecución óptimos para las consultas que implican la tabla.
Establecer STATISTICS_NORECOMPUTE
en ON
no impide la actualización de las estadísticas de índice que se producen durante la operación de recompilación del índice.
STATISTICS_INCREMENTAL = { ON | OFF }
se aplica a: SQL Server 2014 (12.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Cuando ON
, las estadísticas creadas en el índice son estadísticas por partición. Cuando OFF
, se quitan las estadísticas existentes y el motor de base de datos vuelve a calcular las estadísticas. El valor predeterminado es OFF
.
Si no se admiten estadísticas por partición, se omite la opción y se genera una advertencia. Las estadísticas incrementales no se admiten en los casos siguientes:
- Estadísticas creadas con índices que no están alineados por partición con la tabla base
- Estadísticas creadas en bases de datos secundarias legibles de grupos de disponibilidad
- Estadísticas creadas sobre bases de datos de solo lectura
- Estadísticas creadas sobre índices filtrados
- Estadísticas creadas sobre vistas
- Estadísticas creadas sobre tablas internas
- Estadísticas creadas con índices espaciales o índices XML
ONLINE = { ON | OFF }
Especifica si las tablas subyacentes y los índices asociados están disponibles para realizar consultas y modificar datos durante la operación de índice. El valor predeterminado es OFF
.
Para un índice XML o un índice espacial, solo ONLINE = OFF
se admite y si ONLINE
se establece ON
en un error.
Importante
Las operaciones de índices en línea no están disponibles en todas las ediciones de Microsoft SQL Server. Para obtener una lista de las características admitidas por las ediciones de SQL Server, consulte Ediciones y características admitidas de SQL Server 2022.
ACTIVAR
Los bloqueos de tabla a largo plazo no se mantienen durante la operación de índice. Durante la fase principal de la operación de índice, solo se mantiene un bloqueo de intención compartida (
IS
) en la tabla de origen. Esto permite que las consultas o actualizaciones de la tabla y los índices subyacentes continúen. Al principio de la operación, se mantiene un bloqueo compartido (S
) en el objeto de origen durante un breve período de tiempo. Al final de la operación, durante un breve período de tiempo, se adquiere un bloqueo compartido (S
) en el objeto si se crea un índice no clúster. Se adquiere un bloqueo de modificación de esquema (Sch-M
) cuando se crea o quita un índice agrupado en línea y cuando se vuelve a generar un índice agrupado o no clúster.ONLINE
no se puede establecerON
en cuando se crea un índice en una tabla temporal local.Nota
Puede usar la opción
WAIT_AT_LOW_PRIORITY
para reducir o evitar el bloqueo durante las operaciones de índice en línea. Para obtener más información, consulte WAIT_AT_LOW_PRIORITY con operaciones de índice en línea.Apagado
Los bloqueos de tabla se aplican durante la operación de índice. Una operación de índice sin conexión que crea, vuelve a generar o quita un índice agrupado, espacial o XML, o recompila o quita un índice no clúster, adquiere un bloqueo de modificación de esquema (
Sch-M
) en la tabla. Esto impide que todos los usuarios accedan a la tabla subyacente durante la operación. Una operación de índice sin conexión que crea un índice no clúster adquiere inicialmente un bloqueo compartido (S
) en la tabla. Esto evita modificaciones de la definición de tabla subyacente, pero permite leer y modificar los datos de la tabla mientras la compilación del índice está en curso.
Para obtener más información, consulte Realizar operaciones de índice en línea y directrices de para las operaciones de índice en línea.
Los índices, incluidos los índices de las tablas temp globales, se pueden volver a generar en línea, salvo en los casos siguientes:
- Índice XML
- Índice de una tabla temporal local
- Índice clúster único inicial en una vista
- Índices agrupados deshabilitados
- Índices de almacén de columnas agrupados en SQL Server 2017 (14.x)) y versiones anteriores
- Índices de almacén de columnas no agrupados en SQL Server 2016 (13.x)) y versiones anteriores
- Índice clúster, si la tabla subyacente contiene tipos de datos LOB (image, ntext, text) y tipos de datos espaciales
-
varchar(max) y columnas varbinary(max) no pueden formar parte de una clave de índice. En SQL Server (a partir de SQL Server 2012 (11.x)), en Azure SQL Database y en Instancia administrada de Azure SQL, cuando una tabla contiene varchar(max) o columnas varbinary(max), se puede compilar o volver a generar un índice agrupado que contenga otras columnas mediante la opción
ONLINE
.
Para obtener más información, consulte Funcionamiento de las operaciones de índice en línea.
RESUMABLE = { ON | OFF}
se aplica a: SQL Server 2017 (14.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Especifica si una operación de índice en línea se puede reanudar.
ACTIVAR
la operación de índice se puede reanudar.
Apagado
La operación de índice no se puede reanudar.
MAX_DURATION = tiempo [ MINUTES ] usado con RESUMABLE = ON
(requiere ONLINE = ON
)
se aplica a: SQL Server 2017 (14.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Especifica durante cuánto tiempo, en minutos enteros, se ejecuta una operación de índice reanudable antes de pausarse.
ALLOW_ROW_LOCKS = { ON | OFF }
Especifica si se permiten los bloqueos de fila. El valor predeterminado es ON
.
ACTIVAR
Los bloqueos de fila se admiten al obtener acceso al índice. El Motor de base de datos determina cuándo se usan los bloqueos de fila.
Apagado
No se usan bloqueos de fila.
ALLOW_PAGE_LOCKS = { ON | OFF }
Especifica si se permiten bloqueos de página. El valor predeterminado es ON
.
ACTIVAR
Se permiten bloqueos de página cuando se tiene acceso al índice. Motor de base de datos determina el momento en que se usan los bloqueos de página.
Apagado
No se usan bloqueos de página.
OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
se aplica a: SQL Server 2019 (15.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Especifica si se va a optimizar para evitar la contención de inserción de última página. El valor predeterminado es OFF
. Para obtener más información, consulte claves secuenciales.
MAXDOP = max_degree_of_parallelism
Invalida la grado máximo de paralelismo opción de configuración para la operación de índice. Para obtener más información, vea Configure the max degree of parallelism Server Configuration Option. Use MAXDOP
para limitar el grado de paralelismo y el consumo de recursos resultante para una operación de compilación de índice.
Aunque la opción MAXDOP
es sintácticamente compatible con todos los índices XML y los índices espaciales, ALTER INDEX
actualmente solo usa un único procesador.
max_degree_of_parallelism puede tener estos valores:
1
Suprime la generación de planes paralelos.
>1
Restringe el grado máximo de paralelismo usado en una operación de índice paralelo al número especificado o menos en función de la carga de trabajo del sistema actual.
0 (valor predeterminado)
Usa el grado de paralelismo especificado en el nivel de servidor, base de datos o grupo de cargas de trabajo, a menos que se reduzca en función de la carga de trabajo del sistema actual.
Para obtener más información, consulte Configuración de operaciones de índice en paralelo.
Nota
Las operaciones de índices en paralelo no están disponibles en todas las ediciones de SQL Server. Para obtener una lista de las características admitidas por las ediciones de SQL Server, consulte Ediciones y características admitidas de SQL Server 2022.
COMPRESSION_DELAY = { 0 | duration [ minutes ] }
se aplica a: SQL Server (a partir de SQL Server 2016 (13.x),Azure SQL Database e Instancia administrada de Azure SQL
Para una tabla basada en disco con un índice de almacén de columnas, especifica el número mínimo de minutos que debe permanecer un grupo de filas delta en el estado cerrado antes de que el motor de base de datos pueda comprimirlo en un grupo de filas comprimido. Dado que las tablas basadas en disco no realizan un seguimiento de los tiempos de inserción y actualización en filas individuales, el motor de base de datos solo aplica este retraso a los grupos de filas del almacén delta en estado cerrado.
El valor predeterminado es 0 minutos.
Para obtener recomendaciones sobre cuándo usar COMPRESSION_DELAY
, consulte Introducción al almacén de columnas para el análisis operativo en tiempo real.
DATA_COMPRESSION
Especifica la opción de compresión de datos para el índice, número de partición o intervalo de particiones especificado. Las opciones son las siguientes:
Ninguno
No se comprimen el índice ni las particiones especificadas. Esto no se aplica a los índices de almacén de columnas.
ROW
El índice o las particiones especificadas se comprimen mediante la compresión de fila. Esto no se aplica a los índices de almacén de columnas.
PAGE
El índice o las particiones especificadas se comprimen mediante la compresión de página. Esto no se aplica a los índices de almacén de columnas.
COLUMNSTORE
se aplica a: SQL Server 2014 (12.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Solo se aplica a los índices de almacén de columnas, incluidos los clúster y no clúster. Al especificar
COLUMNSTORE
se quitan todas las demás compresión de datos, incluidaCOLUMNSTORE_ARCHIVE
.COLUMNSTORE_ARCHIVE
se aplica a: SQL Server 2014 (12.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Solo se aplica a los índices de almacén de columnas, incluidos los clúster y no clúster.
COLUMNSTORE_ARCHIVE
comprime aún más la partición especificada en un tamaño menor. 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.
Para más información sobre la compresión, vea Compresión de datos.
XML_COMPRESSION
se aplica a: SQL Server 2022 (16.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Especifica la opción de compresión de XML para el índice especificado que contiene una o varias columnas de tipo de datos xml. Las opciones son las siguientes:
ACTIVAR
El índice o las particiones especificadas se comprimen mediante la compresión de XML.
Apagado
No se comprimen el índice ni las particiones especificadas.
ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,... n ] )
Especifica las particiones a las que se aplica el valor DATA_COMPRESSION
o XML_COMPRESSION
. Si el índice no tiene particiones, el ON PARTITIONS
argumento genera un error. Si no se proporciona la cláusula ON PARTITIONS
, la opción DATA_COMPRESSION
o XML_COMPRESSION
se aplica a todas las particiones de un índice con particiones.
<partition_number_expression>
se puede especificar de estas maneras:
- Proporcionar el número de una partición, por ejemplo:
ON PARTITIONS (2)
. - Proporcionar los números de partición para varias particiones individuales separadas por comas, por ejemplo:
ON PARTITIONS (1, 5)
. - Proporcionar particiones individuales y de intervalos:
ON PARTITIONS (2, 4, 6 TO 8)
.
<range>
se puede especificar como números de partición separados por la palabra TO
, por ejemplo: 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:
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)
);
También puede especificar la opción XML_COMPRESSION
más de una vez, por ejemplo:
REBUILD WITH
(
XML_COMPRESSION = OFF ON PARTITIONS (1),
XML_COMPRESSION = ON ON PARTITIONS (2, 4, 6 TO 8),
XML_COMPRESSION = OFF ON PARTITIONS (3, 5)
);
RESUME
se aplica a: SQL Server 2017 (14.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Reanuda una operación de índice que se pausa manualmente, porque se alcanza la duración máxima o debido a un error.
MAX_DURATION
Especifica durante cuánto tiempo, en minutos enteros, se ejecuta una operación de índice reanudable después de reanudarse antes de que se vuelva a pausar.
WAIT_AT_LOW_PRIORITY
Reanudar una operación de compilación de índice después de una pausa tiene que adquirir los bloqueos necesarios.
WAIT_AT_LOW_PRIORITY
indica que la operación de compilación de índices adquiere bloqueos de prioridad baja, lo que permite que otras operaciones continúen mientras la operación de compilación del índice está esperando. La omisión de la opciónWAIT_AT_LOW_PRIORITY
es equivalente aWAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE)
. Para más información, vea WAIT_AT_LOW_PRIORITY.
PAUSE
se aplica a: SQL Server 2017 (14.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Pausa una operación de compilación de índice reanudable.
ABORT
se aplica a: SQL Server 2017 (14.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Anula una operación de compilación de índice en ejecución o en pausa que se inició como reanudable. Debe ejecutar explícitamente un comando ABORT
para finalizar una operación de compilación de índice reanudable. Un error o una pausa en una operación de índice reanudable no finaliza su ejecución; en su lugar, deja la operación en un estado de pausa indefinida.
Comentarios
No se puede usar ALTER INDEX
para volver a particionar un índice o moverlo a otro grupo de archivos. No se puede usar esta instrucción para modificar la definición de índice; por ejemplo, para agregar o eliminar columnas o cambiar el orden de las columnas. Use CREATE INDEX
con la cláusula DROP_EXISTING
para realizar estas operaciones.
Cuando no se especifica una opción de forma explícita, se aplica el valor actual. Por ejemplo, si no se especifica una FILLFACTOR
configuración en la REBUILD
cláusula , el valor del factor de relleno almacenado en el catálogo del sistema se usa durante el proceso de recompilación. Para ver la configuración de las opciones de índice actuales, use sys.indexes.
Los valores de ONLINE
, MAXDOP
y SORT_IN_TEMPDB
no se almacenan en el catálogo del sistema. A menos que se especifiquen en la instrucción de índice, se utiliza el valor predeterminado de la opción.
En los equipos con varios procesadores, ALTER INDEX REBUILD
, al igual que otras consultas, usa automáticamente más procesadores para realizar las operaciones de examen y orden asociadas a la modificación del índice. Por el contrario, ALTER INDEX REORGANIZE
es una sola operación de subproceso. Para obtener más información, consulte Configuración de operaciones de índice en paralelo.
En la base de datos SQL de Microsoft Fabric, ALTER INDEX ALL
no se admite, pero ALTER INDEX <index name>
sí.
Recompilación de índices
El proceso de volver a crear un índice quita y vuelve a crear el índice. 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. Cuando se especifica ALL
, todos los índices de la tabla se quitan y se vuelven a generar en una única transacción. No es necesario quitar las restricciones FOREIGN KEY por adelantado. Cuando se regeneran índices con 128 extensiones o más, el Motor de base de datos difiere las cancelaciones de asignación de página y sus bloqueos asociados hasta después de la confirmación de la transacción. Para obtener más información, vea desasignación diferida.
Para más información, consulte Optimización del mantenimiento de índices para mejorar el rendimiento de las consultas y reducir el consumo de recursos.
Reorganizar índices
La reorganización de un índice usa muy pocos recursos del sistema. 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. La reorganización también compacta las páginas de índice. La compactación se basa en el valor de factor de relleno existente.
Cuando se especifica ALL
, se reorganizan los índices relacionales, tanto agrupados como no clúster, y los índices XML. Algunas restricciones de se aplican al especificar ALL
.
Para más información, consulte Optimización del mantenimiento de índices para mejorar el rendimiento de las consultas y reducir el consumo de recursos.
Nota
Para una tabla con un índice de almacén de columnas ordenado, ALTER INDEX REORGANIZE
no vuelve a ordenar los datos. Para reordenar los datos, use ALTER INDEX REBUILD
.
Deshabilitación de índices
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. La definición de índice permanece en el catálogo del sistema. La deshabilitación de un índice no clúster o agrupado en una vista elimina físicamente los datos del índice. 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. Para ver si un índice está deshabilitado, use la columna is_disabled
en la vista de catálogo de sys.indexes
.
Nota
La documentación utiliza el término árbol B generalmente en referencia a los índices. En los índices del almacén de filas, el motor de la base de datos implementa un árbol B+. Esto no se aplica a los índices de almacén de columnas ni a los índices de tablas optimizadas para memoria. Para obtener más información, consulte la guía de diseño y arquitectura de índices de SQL Server y Azure SQL.
Si una tabla está en una publicación de replicación transaccional, no puede deshabilitar un índice asociado a una restricción de clave principal. Estos índices son necesarios para la replicación. Para deshabilitar este índice, primero debe quitar la tabla de la publicación. Para obtener más información, vea Publicar datos y objetos de base de datos.
Use las instrucciones ALTER INDEX REBUILD
o CREATE INDEX WITH DROP_EXISTING
para habilitar el índice. No se puede volver a generar un índice clúster deshabilitado con la ONLINE
opción establecida ON
en . Para obtener más información, vea Deshabilitar índices y restricciones.
Establecer opciones
Puede establecer las opciones ALLOW_ROW_LOCKS
, , ALLOW_PAGE_LOCKS
OPTIMIZE_FOR_SEQUENTIAL_KEY
, IGNORE_DUP_KEY
, y STATISTICS_NORECOMPUTE
para un índice especificado sin volver a generar ni reorganizar ese índice. Los valores modificados se aplican inmediatamente al índice. Para ver estos valores, use sys.indexes
. Para obtener más información, consulte Establecer opciones de índice.
Opciones de bloqueo de fila y página
Si ALLOW_ROW_LOCKS = ON
y ALLOW_PAGE_LOCK = ON
, se permiten los bloqueos de nivel de fila, página y tabla al obtener acceso al índice. Motor de base de datos elige el bloqueo apropiado y puede cambiar de escala el bloqueo: de un bloqueo de fila o página a un bloqueo de tabla.
Si ALLOW_ROW_LOCKS = OFF
y ALLOW_PAGE_LOCK = OFF
, solo se permite un bloqueo de nivel de tabla al obtener acceso al índice.
Si se especifica ALL
al establecer las opciones de bloqueo de fila o página, la configuración se aplica a todos los índices. Cuando la tabla subyacente es un montón, la configuración se aplica de las siguientes formas:
Opción | Se aplica a |
---|---|
ALLOW_ROW_LOCKS = ON o OFF |
Montón y todos los índices no agrupados asociados. |
ALLOW_PAGE_LOCKS = ON |
Montón y todos los índices no agrupados asociados. |
ALLOW_PAGE_LOCKS = OFF |
Los índices no clúster, donde no se permiten todos los bloqueos de página. Para el montón, no se permiten los bloqueos de página compartidos (S ), update (U ) ni exclusivos (X ). El motor de base de datos todavía puede adquirir bloqueos de página de intención (IS , IU o IX ) con fines internos. |
Advertencia
No se recomienda deshabilitar bloqueos de fila o página en un índice. Pueden producirse problemas relacionados con la simultaneidad y es posible que ciertas funcionalidades no estén disponibles. Por ejemplo, no se puede reorganizar un índice cuando ALLOW_PAGE_LOCKS
está establecido en OFF
.
Operaciones de índice en línea
Al volver a generar un índice y la opción ONLINE
se establece en ON
, los datos del índice, su tabla asociada y otros índices de la misma tabla están disponibles para consultas y modificaciones. También puede regenerar en línea una parte de un índice que resida en una sola partición. Los bloqueos de tabla exclusivos solo se mantienen durante un breve período de tiempo al final de la recompilación del índice.
La reorganización de un índice siempre se realiza en línea. El proceso contiene bloqueos solo durante breves períodos de tiempo y es poco probable que bloquee las consultas o actualizaciones.
Puede realizar operaciones simultáneas de índice en línea en la misma tabla o partición de tabla solo cuando realice las siguientes operaciones:
- Crear varios índices no clúster.
- Reorganizar diferentes índices en la misma tabla.
- Reorganizar diferentes índices mientras se vuelven a generar índices que no se superponen en la misma tabla.
Se producirá un error en todas las operaciones de índice en línea que se realizan al mismo momento. Por ejemplo, no se pueden recompilar dos o más índices en la misma tabla de forma simultánea ni crear un índice nuevo mientras se recompila un índice en la misma tabla.
Para obtener más información, consulte Realizar operaciones de índice en línea.
Operaciones de índice reanudable
se aplica a: SQL Server 2017 (14.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Puede hacer que se pueda reanudar una recompilación de índices en línea. Esto significa que la recompilación del índice se puede detener y reiniciar posteriormente desde el punto donde se detuvo. Para ejecutar una recompilación de índices como reanudable, especifique la opción RESUMABLE = ON
.
Las siguientes directrices se aplican a las operaciones de índice reanudables:
- Para usar la opción
RESUMABLE
, también debe usar la opciónONLINE
. - La opción
RESUMABLE
no se conserva en los metadatos de un índice determinado y solo se aplica a la duración de la instrucción DDL actual. Por tanto, la cláusulaRESUMABLE = ON
debe especificarse explícitamente para habilitar la capacidad de reanudación. - La opción
MAX_DURATION
se puede especificar en dos contextos:-
MAX_DURATION
para la opciónRESUMABLE
especifica el intervalo de tiempo para un índice que se está compilando. Una vez transcurrido este tiempo, y si la compilación del índice todavía se está ejecutando, se pausa. Decide cuándo se puede reanudar la compilación de un índice en pausa. El tiempo en minutos paraMAX_DURATION
debe ser mayor que 0 minutos y menor o igual que una semana (7 * 24 * 60 = 10080 minutos). Una pausa larga en una operación de índice podría afectar notablemente al rendimiento de DML en una tabla específica, así como a la capacidad del disco de base de datos, ya que tanto el índice original como el índice recién creado requieren espacio en disco y las operaciones DML deben actualizarse. Si se omiteMAX_DURATION
opción, la operación de índice continúa hasta que se complete o hasta que se produzca un error. -
MAX_DURATION
para la opciónWAIT_AT_LOW_PRIORITY
especifica el tiempo de espera mediante bloqueos de prioridad baja si la operación de índice está bloqueada, antes de tomar medidas. Para obtener más información, consulte WAIT_AT_LOW_PRIORITY con operaciones de índice en línea.
-
- Para pausar la operación de índice inmediatamente, puede ejecutar el comando
ALTER INDEX PAUSE
o ejecutar el comandoKILL <session_id>
. - 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. También se puede reanudar una operación de regeneración de índice en pausa mediante la instrucciónALTER INDEX RESUME
. - El comando
ABORT
elimina la sesión que ejecuta una compilación de índice y cancela la operación de índice. No se puede reanudar una operación de índice que se ha anulado. - Al reanudar una operación de recompilación de índices que está en pausa, puede cambiar el valor de
MAXDOP
a un nuevo valor. Si no se especificaMAXDOP
al reanudar una operación de índice que está en pausa, se usa el valor deMAXDOP
usado para el último currículum. Si la opciónMAXDOP
no se especifica en absoluto para una operación de recompilación de índices, se usa el valor predeterminado.
Una operación de índice reanudable se ejecuta hasta que se completa, pausa o produce un error. En caso de que la operación se detenga, se emite un error que indica que la operación se ha pausado y que la recompilación del índice no se completó. En caso de que se produzca un error en la operación, también se emite un error.
Para ver si una operación de índice se ejecuta como una operación reanudable y para comprobar su estado de ejecución actual, use la vista de catálogo de sys.index_resumable_operations.
Recursos
Los siguientes recursos son necesarios para las operaciones de índice reanudables:
- Espacio adicional necesario para mantener el índice que se está compilando, incluida la hora en que se pausa la compilación.
- Rendimiento adicional del registro durante la fase de ordenación. El uso general del espacio de registro para el índice reanudable es menor en comparación con la recompilación de índices en línea normal y permite el truncamiento del registro durante esta operación.
- Las instrucciones DDL que intentan modificar un índice que se está recompilando o su tabla asociada mientras no se permite la operación de índice.
- La limpieza fantasma se bloquea en el índice de compilación durante la duración de la operación mientras está en pausa y mientras se ejecuta la operación.
- Si la tabla contiene columnas LOB, una compilación de índice agrupado reanudable requiere un bloqueo de modificación de esquema (
Sch-M
) al principio de la operación.
Limitaciones funcionales actuales
Las operaciones de recompilación de índices reanudables tienen las siguientes limitaciones:
- La opción
SORT_IN_TEMPDB = ON
no se admite para las operaciones de índice reanudables. - El comando DDL con
RESUMABLE = ON
no se puede ejecutar dentro de una transacción explícita. - No se puede crear un índice reanudable que contenga:
- Columnas calculadas o marca de tiempo/rowversion columnas como columnas de clave.
- Columna LOB como columna incluida.
- No se admiten operaciones de índice reanudables para:
- Comando
ALTER INDEX REBUILD ALL
- Comando
ALTER TABLE REBUILD
- Índices de almacén de columnas
- Índices filtrados
- Índices deshabilitados
- Comando
WAIT_AT_LOW_PRIORITY con operaciones de índice en línea
se aplica a: SQL Server 2014 (12.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
Cuando no se usa la opción WAIT_AT_LOW_PRIORITY
, todas las transacciones de bloqueo activas que contienen bloqueos en la tabla o el índice deben completarse para que se inicie y complete la operación de recompilación de índices. Cuando se inicia la operación de índice en línea y antes de que se complete, debe adquirir un compartido (S
) o un bloqueo de modificación de esquema (Sch-M
) en la tabla y contenerlo durante un breve tiempo. Aunque el bloqueo solo se mantiene durante un breve tiempo, podría afectar significativamente al rendimiento de la carga de trabajo, aumentar la latencia de las consultas o provocar tiempos de espera de ejecución.
Para evitar estos problemas, la opción WAIT_AT_LOW_PRIORITY
permite administrar el comportamiento de S
o Sch-M
bloqueos necesarios para que se inicie y complete una operación de índice en línea, seleccionando entre tres opciones. En todos los casos, si durante el tiempo de espera especificado por MAX_DURATION = n [minutes]
no hay ningún bloqueo que implique la operación de índice, la operación de índice continúa inmediatamente.
WAIT_AT_LOW_PRIORITY
hace que la operación de índice en línea espere mediante bloqueos de prioridad baja, lo que permite que otras operaciones usen bloqueos de prioridad normales mientras tanto. La omisión de la opción WAIT_AT_LOW_PRIORITY
es equivalente a WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE)
.
MAX_DURATION
=
tiempo [MINUTES
]
El tiempo de espera (un valor entero especificado en minutos) que espera la operación de índice en línea mediante bloqueos de prioridad baja. Si la operación está bloqueada durante el MAX_DURATION
tiempo, se ejecuta la acción especificada ABORT_AFTER_WAIT
.
MAX_DURATION
time siempre está en minutos y se puede omitir la palabra MINUTES
.
ABORT_AFTER_WAIT
= [NONE
| SELF
| BLOCKERS
]
-
NONE
: continúe esperando el bloqueo con prioridad normal. -
SELF
: salga de la operación de índice en línea que se está ejecutando actualmente, sin realizar ninguna acción. La opciónSELF
no se puede usar cuandoMAX_DURATION
es 0. -
BLOCKERS
: elimine todas las transacciones de usuario que bloqueen la operación de índice en línea para que la operación pueda continuar. La opciónBLOCKERS
requiere que la entidad de seguridad que ejecute la instrucciónCREATE INDEX
oALTER INDEX
tenga el permisoALTER ANY CONNECTION
.
Puede usar los siguientes eventos extendidos para supervisar las operaciones de índice que esperan bloqueos con prioridad baja:
lock_request_priority_state
process_killed_by_abort_blockers
ddl_with_wait_at_low_priority
Restricciones de los índices espaciales
Al recompilar un índice espacial, la tabla de usuario subyacente no está disponible durante la operación de índice.
La PRIMARY KEY
restricción de la tabla de usuario no se puede modificar mientras se define un índice espacial en una columna de esa tabla. Para cambiar la PRIMARY KEY
restricción, quite primero todos los índices espaciales de la tabla. Después de modificar la PRIMARY KEY
restricción, puede volver a crear cada uno de los índices espaciales.
No se puede especificar ningún índice espacial en una operación de recompilación de una sola partición. Sin embargo, puede especificar índices espaciales en una recompilación de tablas.
Para cambiar las opciones específicas de un índice espacial, como BOUNDING_BOX
o GRID
, puede usar una instrucción CREATE SPATIAL INDEX
que especifique DROP_EXISTING = ON
, o bien quitar el índice espacial y crear uno nuevo. Para obtener un ejemplo, vea CREATE SPATIAL INDEX.
Compresión de datos
Para obtener más información sobre la compresión de datos, consulte Compresión de datos.
A continuación se muestran los puntos clave que se deben tener en cuenta en el contexto de las operaciones de compilación de índices cuando se usa la compresión de datos:
- La compresión puede permitir que se almacenen más filas en una página, pero no cambia el tamaño máximo de fila.
- Las páginas no hoja de un índice no están comprimidas por páginas, pero se pueden comprimir filas.
- Cada índice no clúster tiene una configuración de compresión individual y no hereda la configuración de compresión de la tabla subyacente.
- Cuando se crea un índice agrupado en un montón, el índice agrupado hereda el estado de compresión del montón a menos que se especifique un estado de compresión alternativo.
Las consideraciones siguientes aplican la recompilación de índices con particiones:
- No se puede cambiar la configuración de compresión de una sola partición si la tabla tiene índices no alineados.
- La sintaxis
ALTER INDEX <index> ... REBUILD PARTITION ... WITH DATA_COMPRESSION = ...
vuelve a generar la partición especificada del índice con la opción de compresión especificada. Si se omite la cláusulaWITH DATA_COMPRESSION
, se usa la opción de compresión existente. - La sintaxis
ALTER INDEX <index> ... REBUILD PARTITION = ALL
vuelve a generar todas las particiones del índice mediante las opciones de compresión existentes. - La sintaxis
ALTER INDEX <index> ... REBUILD PARTITION = ALL (WITH ...)
vuelve a generar todas las particiones del índice. Puede elegir una compresión diferente para diferentes particiones mediante la cláusulaDATA_COMPRESSION = ... ON PARTITIONS ( ...)
.
Para evaluar cómo el cambio PAGE
y ROW
la compresión afectan a una tabla, un índice o una partición, use el procedimiento almacenado sp_estimate_data_compression_savings .
Estadísticas
Al recompilar un índice, las estadísticas del índice se actualizan con un examen completo de índices no particionados y con la relación de muestreo predeterminada para los índices con particiones. No se actualizan otras estadísticas de la tabla como parte de la recompilación de índices.
Permisos
Se requiere el permiso ALTER
en la tabla o vista.
Notas de la versión
- Azure SQL Database no admite grupos de archivos distintos de
PRIMARY
. - Azure SQL Database y Azure SQL Managed Instance no admiten opciones de
FILESTREAM
. - Los índices de almacén de columnas no están disponibles antes de SQL Server 2012 (11.x).
- Las operaciones de índice reanudables están disponibles en SQL Server 2017 (14.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL.
Ejemplo de sintaxis básica
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 columnas
Estos ejemplos se aplican a índices de almacén de columnas.
A. Demo de REORGANIZE
En este ejemplo se muestra cómo funciona el comando ALTER INDEX REORGANIZE
. Crea una tabla que tiene varios grupos de filas y, después, muestra la forma en que REORGANIZE
combina los grupos de filas.
-- 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 TRANSACTION
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. A partir de SQL Server 2016 (13.x), la INSERT INTO
operación se puede ejecutar en paralelo cuando TABLOCK
se usa.
INSERT INTO cci_target WITH (TABLOCK)
SELECT TOP 300000 * FROM staging;
Ejecute este comando para ver los grupos de OPEN
filas delta. El número de grupos de filas depende del grado de paralelismo.
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 CLOSED
grupos de filas y OPEN
al almacén de columnas.
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.
ALTER INDEX idxcci_cci_target ON cci_target REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);
B. Comprimir grupos de filas delta con estado CLOSED en el almacén de columnas
En este ejemplo se usa la REORGANIZE
opción de comprimir cada CLOSED
grupo de filas delta en el almacén de columnas como un grupo de filas comprimido. Esto no es necesario, pero es útil cuando el mover de tupla no comprime CLOSED
los grupos de filas lo suficientemente rápido.
Puede ejecutar ambos ejemplos en la base de datos de ejemplo AdventureWorksDW2022
.
Este ejemplo se ejecuta REORGANIZE
en todas las particiones.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;
Este ejemplo se ejecuta REORGANIZE
en una partición específica.
-- REORGANIZE a specific partition
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0;
C. Comprimir todos los grupos de filas delta con estado OPEN y CLOSED en el almacén de columnas
se aplica a: SQL Server 2016 (13.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
El comando REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON)
comprime cada OPEN
grupo de filas delta en CLOSED
el almacén de columnas como un grupo de filas comprimido. Esto vacía el almacén delta y obliga a todas las filas a comprimirse en el almacén de columnas. 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.
REORGANIZE
combina grupos de filas para rellenar grupos de filas hasta un número máximo de filas <= 1024 576. Por lo tanto, cuando comprime todos los OPEN
grupos de filas y CLOSED
no termina con una gran cantidad de grupos de filas comprimidos que solo tienen algunas filas en ellos. 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.
Los ejemplos siguientes usan la base de datos AdventureWorksDW2022
.
En este ejemplo se mueven todos los OPEN
grupos de filas delta y CLOSED
en el índice de almacén de columnas.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON);
En este ejemplo se mueven todos los OPEN
grupos de filas delta y CLOSED
en el índice de almacén de columnas para una partición específica.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE PARTITION = 0 WITH (COMPRESS_ALL_ROW_GROUPS = ON);
D. Desfragmentar un índice de almacén de columnas en línea
No se aplica a: SQL Server 2012 (11.x) y SQL Server 2014 (12.x).
A partir de SQL Server 2016 (13.x), REORGANIZE
comprime más que los grupos de filas delta en el almacén de columnas. también realiza desfragmentación en línea. 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. 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. Todos los grupos de filas que se cambian se vuelven a comprimir.
Nota
A partir de SQL Server 2016 (13.x), la regeneración de un índice de almacén de columnas ya no es necesaria en la mayoría de las situaciones, ya que REORGANIZE
quita físicamente las filas eliminadas y combina grupos de filas. La COMPRESS_ALL_ROW_GROUPS
opción fuerza todos los grupos de filas diferenciales o OPEN
todos CLOSED
en el almacén de columnas que anteriormente solo se podía realizar con una recompilación.
REORGANIZE
está en línea y se produce en segundo plano para que las consultas puedan continuar a medida que se produzca la operación.
En el ejemplo siguiente se realiza un REORGANIZE
para desfragmentar el índice mediante la eliminación física de filas que se han eliminado lógicamente de la tabla y la combinación de grupos de filas.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REORGANIZE;
E. Regenerar un índice de almacén de columnas agrupado sin conexión
Se aplica a: SQL Server, Azure SQL Database e Instancia administrada de Azure SQL
Sugerencia
A partir SQL Server 2016 (13.x) de y en Azure SQL Database, se recomienda usar ALTER INDEX REORGANIZE
en lugar de ALTER INDEX REBUILD
para los índices de almacén de columnas.
Nota
En SQL Server 2012 (11.x) y SQL Server 2014 (12.x), REORGANIZE
solo se usa para comprimir CLOSED
grupos de filas en el almacén de columnas. 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.
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. Este primer paso prepara una tabla FactInternetSales2
en la base de datos AdventureWorksDW2022
con un índice de almacén de columnas agrupado e inserta los datos de las cuatro primeras columnas.
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 un OPEN
grupo de filas, lo que significa que SQL Server espera a que se agreguen más filas antes de cerrar el grupo de filas y mover los datos al almacén de columnas. 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.
ALTER INDEX cci_FactInternetSales2 ON FactInternetSales2 REBUILD;
SELECT * FROM sys.column_store_row_groups;
Los resultados de la SELECT
instrucción muestran que el grupo de filas es COMPRESSED
, lo que significa que los segmentos de columna del grupo de filas ahora se comprimen y almacenan en el almacén de columnas.
F. Regenerar una partición de un índice de almacén de columnas agrupado sin conexión
se aplica a: SQL Server 2012 (11.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
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. En este ejemplo se regenera la partición 12. A partir de SQL Server 2016 (13.x), se recomienda reemplazar REBUILD
por REORGANIZE
.
ALTER INDEX cci_fact3
ON fact3
REBUILD PARTITION = 12;
G. Cambiar un índice de almacén de columnas agrupado para usar la compresión de archivo
No se aplica a: 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 COLUMNSTORE_ARCHIVE
opción de compresión de datos. Esto resulta práctico para datos más antiguos que prefiere mantener en un almacenamiento más económico. Solo se recomienda usar esto en los datos a los que no se tiene acceso a menudo, ya que la descompresión es más lenta que con la compresión normal COLUMNSTORE
.
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. El resultado final solo usa la compresión del almacén de columnas.
En primer lugar, cree una tabla con un índice de almacén de columnas agrupado para preparar el ejemplo. A continuación, comprima aún más la tabla usando compresión de archivo.
--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);
GO
En este ejemplo, se quita la compresión de archivo y solo se usa la compresión de almacén de columnas.
ALTER INDEX cci_SimpleTable ON SimpleTable
REBUILD
WITH (DATA_COMPRESSION = COLUMNSTORE);
GO
Ejemplos: Índices de almacén de filas
A. Volver a generar un índice
En el siguiente ejemplo se regenera un único índice en la tabla Employee
de la base de datos AdventureWorks2022
.
ALTER INDEX PK_Employee_EmployeeID ON HumanResources.Employee REBUILD;
B. Recompilación de todos los índices de una tabla y especificación de opciones
En el ejemplo siguiente se especifica la palabra clave ALL
. Esto recompila todos los índices asociados a la tabla Production.Product
en la base de datos AdventureWorks2022
. Se especifican tres opciones.
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.
se aplica a: SQL Server 2014 (12.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
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. Reorganización de un índice con compactación de LOB
En el siguiente ejemplo se reorganiza un único índice clúster en la base de datos AdventureWorks2022
. 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. No es necesario especificar la opción WITH (LOB_COMPACTION = ON)
, dado que el valor predeterminado es ON.
ALTER INDEX PK_ProductPhoto_ProductPhotoID ON Production.ProductPhoto REORGANIZE WITH (LOB_COMPACTION = ON);
D. Establecimiento de opciones en un índice
En el siguiente ejemplo se establecen varias opciones en el índice AK_SalesOrderHeader_SalesOrderNumber
en la base de datos AdventureWorks2022
.
ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON
Sales.SalesOrderHeader
SET (
STATISTICS_NORECOMPUTE = ON,
IGNORE_DUP_KEY = ON,
ALLOW_PAGE_LOCKS = ON
) ;
GO
E. Deshabilitación de un índice
En el siguiente ejemplo se deshabilita un índice no clúster de la tabla Employee
en la base de datos AdventureWorks2022
.
ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee DISABLE;
F. Deshabilitación de restricciones
En el ejemplo siguiente se deshabilita una PRIMARY KEY
restricción deshabilitando el PRIMARY KEY
índice de la AdventureWorks2022
base de datos. La FOREIGN KEY
restricción de la tabla subyacente se deshabilita automáticamente y se muestra el mensaje de advertencia.
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department DISABLE;
El conjunto de resultados devuelve este mensaje de advertencia.
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. Habilitación de restricciones
En el ejemplo siguiente se habilitan las PRIMARY KEY
restricciones y FOREIGN KEY
que se deshabilitaron en el ejemplo F.
La PRIMARY KEY
restricción está habilitada mediante la regeneración del PRIMARY KEY
índice.
ALTER INDEX PK_Department_DepartmentID ON HumanResources.Department REBUILD;
A continuación, se habilita la FOREIGN KEY
restricción.
ALTER TABLE HumanResources.EmployeeDepartmentHistory
CHECK CONSTRAINT FK_EmployeeDepartmentHistory_Department_DepartmentID;
GO
H. Recompilación de un índice con particiones
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 AdventureWorks2022
. La partición 5 se recompila con ONLINE=ON
y el tiempo de espera de 10 minutos para el bloqueo de prioridad baja se aplica por separado a cada bloqueo adquirido por la operación de recompilación de índice. Si, durante este tiempo, no se puede obtener el bloqueo para completar la recompilación del índice, la instrucción de operación de recompilación se anula debido a ABORT_AFTER_WAIT = SELF
.
se aplica a: SQL Server 2014 (12.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
-- 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. Cambio de la configuración de compresión de un índice
En el ejemplo siguiente se vuelve a generar un índice en una tabla de almacén de filas sin particiones.
ALTER INDEX IX_INDEX1
ON T1
REBUILD
WITH (DATA_COMPRESSION = PAGE);
GO
J. Cambio de la configuración de un índice con compresión de XML
Se aplica a SQL Server 2022 (16.x) y versiones posteriores, Azure SQL Database y Azure SQL Managed Instance.
En el ejemplo siguiente se vuelve a generar un índice en una tabla de almacén de filas sin particiones.
ALTER INDEX IX_INDEX1
ON T1
REBUILD
WITH (XML_COMPRESSION = ON);
GO
Para obtener más ejemplos de compresión de datos, consulte Compresión de datos.
K. Regeneración de índice reanudable en línea
se aplica a: SQL Server 2017 (14.x) y versiones posteriores, Azure SQL Database e Instancia administrada de Azure SQL
En estos ejemplos se muestra cómo usar la regeneración de índice reanudable en línea.
Ejecute una recompilación de índices en línea como operación reanudable con MAXDOP = 1
. Al volver a ejecutar el mismo comando después de pausar una operación de índice, se reanuda automáticamente la operación de recompilación del índice.
ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE = ON, MAXDOP = 1, RESUMABLE = ON);
Ejecute una recompilación de índices en línea como operación reanudable con MAX_DURATION
establecido en 240 minutos.
ALTER INDEX test_idx on test_table REBUILD WITH (ONLINE = ON, RESUMABLE = ON, MAX_DURATION = 240);
Pause una operación de regeneración de índice en línea reanudable que se esté ejecutando.
ALTER INDEX test_idx on test_table PAUSE;
Reanude una recompilación de índices en línea para una recompilación de índices que se ejecutó como operación reanudable especificando un nuevo valor para MAXDOP
establecer en 4.
ALTER INDEX test_idx on test_table RESUME WITH (MAXDOP = 4);
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. Establezca MAXDOP
en 2, establezca el tiempo de ejecución para que el índice se ejecute como reanudable en 240 minutos y, si se bloquea un índice en el bloqueo, espere 10 minutos y después de eso elimine todos los bloqueadores.
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));
Anule la operación de recompilación de índices reanudable que se está ejecutando o en pausa.
ALTER INDEX test_idx on test_table ABORT;
Contenido relacionado
- Guía de diseño y de arquitectura de índices de SQL Server y Azure SQL
- Realización de operaciones de índice en línea
- CREATE INDEX (Transact-SQL)
- CREATE SPATIAL INDEX (Transact-SQL)
- CREATE XML INDEX (Transact-SQL)
- DROP INDEX (Transact-SQL)
- Deshabilitar índices y restricciones
- Índices XML (SQL Server)
- Optimización del mantenimiento de índices para mejorar el rendimiento de las consultas y reducir el consumo de recursos
- sys.dm_db_index_physical_stats (Transact-SQL)
- EVENTDATA (Transact-SQL)