Reorganización y nueva generación de índicesReorganize and rebuild indexes

SE APLICA A: síSQL Server síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

En este artículo se describe cómo reorganizar o volver a generar un índice fragmentado en SQL ServerSQL Server mediante SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This article describes how to reorganize or rebuild a fragmented index in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. Motor de base de datos de SQL ServerSQL Server Database Engine modifica los índices automáticamente cada vez que se realizan operaciones de inserción, actualización o eliminación en los datos subyacentes.The Motor de base de datos de SQL ServerSQL Server Database Engine automatically modifies indexes whenever insert, update, or delete operations are made to the underlying data. Con el tiempo, estas modificaciones pueden hacer que la información del índice se disperse por la base de datos (se fragmente).Over time these modifications can cause the information in the index to become scattered in the database (fragmented). La fragmentación ocurre cuando los índices tienen páginas en las que la ordenación lógica, basada en el valor de clave, no coincide con la ordenación física dentro del archivo de datos.Fragmentation exists when indexes have pages in which the logical ordering, based on the key value, does not match the physical ordering inside the data file. Los índices muy fragmentados pueden reducir el rendimiento de la consulta y ralentizar la respuesta de la aplicación, especialmente durante las operaciones de análisis.Heavily fragmented indexes can degrade query performance and cause your application to respond slowly, especially scan operations.

Puede solucionar la fragmentación del índice reorganizándolo o volviéndolo a generar.You can remedy index fragmentation by reorganizing or rebuilding an index. Para los índices con particiones generados en un esquema de partición, puede usar cualquiera de estos métodos en un índice completo o en una sola partición de un índice:For partitioned indexes built on a partition scheme, you can use either of these methods on a complete index or a single partition of an index:

  • La reorganización de un índice usa muy pocos recursos del sistema y es una operación en línea.Reorganizing an index uses minimal system resources and is an online operation. 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.

    • Para los índices de almacén de filas, desfragmenta el nivel hoja de los índices agrupados y no agrupados 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.For rowstore indexes, 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 usan índices de almacén de columnas, es posible que, después de cargar datos, el almacén delta tenga varios grupos de filas pequeños.When using columnstore indexes, it is possible that after loading data the delta store has multiple small rowgroups. La reorganización del índice de almacén de columnas fuerza a todos los grupos de filas al almacén de columnas y, luego, combina los grupos de filas en menos grupos de filas con más filas.Reorganizing the columnstore index forces all of the rowgroups into the columnstore, and then combines the rowgroups into fewer rowgroups with more rows. La operación de reorganización también quitará las filas que se hayan eliminado del almacén de columnas.The reorganize operation will also remove rows that have been deleted from the columnstore. Inicialmente, el proceso de reorganización requerirá recursos de CPU adicionales para comprimir los datos, lo que podría reducir el rendimiento general del sistema.Reorganizing will initially require additional CPU resources to compress the data, which could slow overall system performance. Sin embargo, tan pronto como los datos están comprimidos, el rendimiento de las consultas puede mejorar.However, as soon as the data is compressed, query performance can improve.
  • El proceso de volver a crear un índice quita y vuelve a crear el índice.Rebuilding an index drops and re-creates the index. Según el tipo de índice y la versión de Motor de base de datosDatabase Engine, esto se puede hacer en línea o sin conexión.Depending on the type of index and Motor de base de datosDatabase Engine version, this can be done online or offline.

    • Para los índices de almacén de filas, el proceso de volver a crear un índice quita la fragmentación, usa 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.For rowstore indexes, rebuilding 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 los índices de almacén de columnas, el proceso de volver a crear un índice quita la fragmentación, mueve todas las filas al almacén de columnas y recupera el espacio en disco mediante la eliminación física de las filas que se han quitado lógicamente de la tabla.For columnstore indexes, rebuilding removes fragmentation, moves all rows into the columnstore, and reclaims disk space by physically deleting rows that have been logically deleted from the table. A partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x), normalmente no es necesario volver a generar el índice de almacén de columnas, ya que REORGANIZE realiza las operaciones básicas de una regeneración en segundo plano como una operación en línea.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), rebuilding the columnstore index is usually not needed since REORGANIZE performs the essentials of a rebuild in the background as an online operation.

En versiones anteriores de SQL ServerSQL Server, a veces se podía volver a generar un índice no agrupado de almacén de filas para corregir incoherencias provocadas por errores de hardware.In earlier versions of SQL ServerSQL Server, you could sometimes rebuild a rowstore nonclustered index to correct inconsistencies caused by hardware failures.
A partir de SQL Server 2008SQL Server 2008, aún es posible reparar estas incoherencias entre el índice y el índice agrupado al volver a generar un índice no agrupado sin conexión.Starting with SQL Server 2008SQL Server 2008, 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 agrupado, quite y vuelva a crear el índice no agrupado.To assure a rebuild from the clustered index, drop and recreate the nonclustered 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).

Detección de la fragmentaciónDetecting fragmentation

El primer paso necesario para detectar qué método de desfragmentación utilizar es analizar el índice a fin de determinar la magnitud de la fragmentación.The first step in deciding which defragmentation method to use is to analyze the index to determine the degree of fragmentation.

Detección de la fragmentación en los índices de almacén de filasDetecting fragmentation on rowstore indexes

Si usa la función del sistema sys.dm_db_index_physical_stats, podrá detectar la fragmentación de un índice específico, de todos los índices de una tabla o vista indexada, de todos los índices de una base de datos o de todos los índices de todas las bases de datos.By using the system function sys.dm_db_index_physical_stats, you can detect fragmentation in a specific index, all indexes on a table or indexed view, all indexes in a database, or all indexes in all databases. Para los índices con particiones, sys.dm_db_index_physical_stats también proporciona información de la fragmentación para cada partición.For partitioned indexes, sys.dm_db_index_physical_stats also provides fragmentation information for each partition.

El conjunto de resultados que devuelve la función sys.dm_db_index_physical_stats incluye las columnas siguientes:The result set returned by the sys.dm_db_index_physical_stats function includes the following columns:

columnaColumn DescripciónDescription
avg_fragmentation_in_percentavg_fragmentation_in_percent Porcentaje de fragmentación lógica (páginas de un índice que no funcionan correctamente).The percent of logical fragmentation (out-of-order pages in the index).
fragment_countfragment_count Número de fragmentos (páginas hoja físicamente consecutivas) en el índice.The number of fragments (physically consecutive leaf pages) in the index.
avg_fragment_size_in_pagesavg_fragment_size_in_pages Número promedio de páginas en un fragmento del índice.Average number of pages in one fragment in an index.

Una vez determinada la magnitud de la fragmentación, utilice la siguiente tabla para determinar el mejor método para corregir la fragmentación propiamente dicha.After the degree of fragmentation is known, use the following table to determine the best method to correct the fragmentation.

Valor deavg_fragmentation_in_percentavg_fragmentation_in_percent value Instrucción correctivaCorrective statement
> 5% y < = 30%> 5% and < = 30% ALTER INDEX REORGANIZEALTER INDEX REORGANIZE
> 30%> 30% ALTER INDEX REBUILD WITH (ONLINE = ON) 1ALTER INDEX REBUILD WITH (ONLINE = ON) 1

1 La regeneración de un índice se puede ejecutar en línea o sin conexión.1 Rebuilding an index can be executed online or offline. La reorganización de un índice siempre se ejecuta en línea.Reorganizing an index is always executed online. Para lograr una disponibilidad similar a la opción de reorganización, debe volver a generar los índices en línea.To achieve availability similar to the reorganize option, you should rebuild indexes online. Para más información, consulte Perform Index Operations Online.For more information, see Perform Index Operations Online.

Sugerencia

Estos valores proporcionan directrices generales para la determinación del punto en el que debe cambiar entre ALTER INDEX REORGANIZE y ALTER INDEX REBUILD.These values provide a rough guideline for determining the point at which you should switch between ALTER INDEX REORGANIZE and ALTER INDEX REBUILD. No obstante, los valores reales pueden variar de un caso a otro.However, the actual values may vary from case to case. Es importante que experimente la determinación del mejor umbral para su entorno.It is important that you experiment to determine the best threshold for your environment. Por ejemplo, si se usa un índice determinado principalmente para operaciones de examen, la eliminación de la fragmentación puede mejorar el rendimiento de estas operaciones.For example, if a given index is used mainly for scan operations, removing fragmentation can improve performance of these operations. Las ventajas de rendimiento son menos evidentes para los índices que se usan principalmente para las operaciones de búsqueda.The performance benefit is less noticeable for indexes that are used primarily for seek operations. Del mismo modo, la eliminación de la fragmentación en un montón (una tabla sin índice agrupado) es especialmente útil para las operaciones de examen de índices no agrupados, pero tiene poco efecto en las operaciones de búsqueda.Similarly, removing fragmentation in a heap (a table with no clustered index) is especially useful for nonclustered index scan operations, but has little effect in lookup operations.

Los niveles de fragmentación muy bajos (inferiores al 5 por ciento) normalmente no deben tratarse con ninguno de estos comandos, dado que el beneficio de quitar una cantidad de fragmentación tan pequeña es casi siempre ampliamente superado por el costo de reorganizar o volver a generar el índice.Very low levels of fragmentation (less than 5 percent) should typically not be addressed by either of these commands, because the benefit from removing such a small amount of fragmentation is almost always vastly outweighed by the cost of reorganizing or rebuilding the index. Para obtener más información acerca de ALTER INDEX REORGANIZE y ALTER INDEX REBUILD, consulte ALTER INDEX (Transact-SQL).For more information about ALTER INDEX REORGANIZE and ALTER INDEX REBUILD, refer to ALTER INDEX (Transact-SQL).

Nota

Con frecuencia, cuando se vuelven a generar o se reorganizan índices pequeños de almacén de filas no se reduce la fragmentación.Rebuilding or reorganizing small rowstore 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.

Detección de la fragmentación en los índices de almacén de columnasDetecting fragmentation on columnstore indexes

Mediante la DMV sys.dm_db_column_store_row_group_physical_stats, puede determinar el porcentaje de filas eliminadas, que es una buena medida de la fragmentación en un grupo de filas.By using the DMV sys.dm_db_column_store_row_group_physical_stats you can determine the percentage of deleted rows, which is a good measure for the fragmentation in a rowgroup. Use esta información para calcular la fragmentación en un índice específico, todos los índices de una tabla, todos los índices de una base de datos o todos los índices de todas las bases de datos.Use this information to compute the fragmentation in a specific index, all indexes on a table, all indexes in a database, or all indexes in all databases.

El conjunto de resultados devuelto por la DMV sys.dm_db_column_store_row_group_physical_stats incluye las columnas siguientes:The result set returned by the sys.dm_db_column_store_row_group_physical_stats DMV includes the following columns:

columnaColumn DescripciónDescription
total_rowstotal_rows Número de filas almacenadas físicamente en el grupo de filas.Number of rows physical stored in the row group. En el caso de los grupos de filas comprimidos, incluye las filas marcadas como eliminadas.For compressed row groups, this includes the rows that are marked deleted.
deleted_rowsdeleted_rows Número de filas almacenadas físicamente en un grupo de filas comprimido que se han marcado para su eliminación.Number of rows physically stored in a compressed row group that are marked for deletion. Es 0 en el caso de los grupos de filas que se encuentran en el almacén delta.0 for row groups that are in the delta store.

Se puede usar para calcular la fragmentación con la fórmula 100*(ISNULL(deleted_rows,0))/NULLIF(total_rows,0).This can be used to compute the fragmentation using the formula 100*(ISNULL(deleted_rows,0))/NULLIF(total_rows,0). Una vez determinada la magnitud de la fragmentación, utilice la siguiente tabla para determinar el mejor método para corregir la fragmentación propiamente dicha.After the degree of fragmentation is known, use the following table to determine the best method to correct the fragmentation.

Valor de la fragmentación calculada en porcentajecomputed fragmentation in percent value Se aplica a la versiónApplies to version Instrucción correctivaCorrective statement
> = 20 %> = 20% SQL Server 2012 (11.x)SQL Server 2012 (11.x) y SQL Server 2014 (12.x)SQL Server 2014 (12.x)and SQL Server 2014 (12.x)SQL Server 2014 (12.x) ALTER INDEX REBUILDALTER INDEX REBUILD
> = 20 %> = 20% A partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x)Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) ALTER INDEX REORGANIZEALTER INDEX REORGANIZE

Consideraciones sobre la desfragmentación de índicesIndex defragmentation considerations

En determinadas circunstancias, al volver a generar un índice agrupado, se volverán a generar automáticamente los índices no agrupados que hagan referencia a la clave de agrupación en clústeres, si es necesario cambiar los identificadores físicos o lógicos contenidos en los registros de índices no agrupados.Under certain conditions, rebuilding a clustered index will automatically rebuild any nonclustered index that reference the clustering key, if the physical or logical identifiers contained in the nonclustered index records need to change.

Escenarios que obligan a que todos los índices no agrupados de almacén de filas se vuelvan a generar automáticamente en una tabla:Scenarios that force all rowstore nonclustered indexes to be automatically rebuilt on a table:

  • Creación de un índice agrupado en una tablaCreating a clustered index on a table
  • Eliminación de un índice agrupado, lo que hace que la tabla se almacene como un montónRemoving a clustered index, causing the table to be stored as a heap
  • Cambio de la clave de agrupación en clústeres para incluir o excluir columnasChanging the clustering key to include or exclude columns

Escenarios que no requieren que todos los índices no agrupados de almacén de filas se vuelvan a generar automáticamente en una tabla:Scenarios that do not require all rowstore nonclustered indexes to be automatically rebuilt on a table:

  • Recompilación de un índice agrupado únicoRebuilding a unique clustered index
  • Recompilación de un índice agrupado que no es únicoRebuilding a non-unique clustered index
  • Cambio del esquema de índice, como al aplicar un esquema de partición a un índice agrupado o al mover el índice agrupado a un grupo de archivos diferenteChanging the index schema, such as applying a partitioning scheme to a clustered index or moving the clustered index to a different filegroup

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.

Importante

Mientras se vuelve a generar un índice, el medio físico debe tener espacio suficiente para almacenar dos copias del índice.While an index rebuild occurs, the physical media must have enough space to store two copies of the index. Cuando finaliza el proceso, SQL ServerSQL Server elimina el índice original.When the rebuild is finished, SQL ServerSQL Server deletes the original index.

Cuando se especifica ALL en la instrucción ALTER INDEX, se reorganizan los índices relacionales, tanto agrupados como no agrupados, y los índices XML.When ALL is specified with the ALTER INDEX statement, relational indexes, both clustered and nonclustered, and XML indexes on the table are reorganized.

Consideraciones específicas para volver a generar un índice de almacén de columnasConsiderations specific to rebuilding a columnstore index

Cuando se vuelve a generar un índice de almacén de columnas, Motor de base de datosDatabase Engine lee todos los datos del índice original de almacén de columnas, incluido el almacén delta.When rebuilding a columnstore index, the Motor de base de datosDatabase Engine reads all data from the original columnstore index, including the delta store. 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. Motor de base de datosDatabase Engine desfragmenta el almacén de columnas mediante la eliminación física de filas que se han eliminado lógicamente de la tabla y los bytes eliminados se reclaman en el disco.The Motor de base de datosDatabase Engine defragments the columnstore by physically deleting rows that have been logically deleted from the table; the deleted bytes are reclaimed on the disk.

Vuelva a generar una partición en lugar de la tabla completa:Rebuild a partition instead of the entire table:

  • Volver a generar la tabla completa tarda mucho si el índice es grande y requiere el espacio en disco suficiente para almacenar una copia adicional del índice durante la regeneración.Rebuilding the entire table takes a long time if the index is large, and it requires enough disk space to store an additional copy of the index during the rebuild. Por lo general, solo es necesario volver a generar la partición que se ha usado más recientemente.Usually it is only necessary to rebuild the most recently used partition.

  • Para las tablas con particiones, no es necesario que vuelva a generar el índice de almacén de columnas completo, ya que es probable que se produzca la fragmentación solo en las particiones que se han modificado recientemente.For partitioned tables, you do not need to rebuild the entire columnstore index because fragmentation is likely to occur in only the partitions that have been modified recently. Las tablas de hechos y las tablas de dimensiones de gran tamaño normalmente tienen particiones para poder realizar operaciones de copia de seguridad y de administración con los fragmentos de la tabla.Fact tables and large dimension tables are usually partitioned in order to perform backup and management operations on chunks of the table.

Vuelva a generar una partición después de haber realizado operaciones DML intensivas:Rebuild a partition after heavy DML operations:

  • La regeneración de una partición desfragmentará la partición y reducirá el almacenamiento de disco.Rebuilding a partition will defragment the partition and reduce disk storage. Al volver a generarla, se eliminarán todas las filas del almacén de columnas que están marcadas para la eliminación y se trasladarán todos los grupos de filas del almacén delta al almacén de columnas.Rebuilding will delete all rows from the columnstore that are marked for deletion, and it will move all rowgroups from the delta store into the columnstore. Tenga en cuenta que puede haber varios grupos de filas en el almacén delta con menos de un millón de filas.Note, there can be multiple rowgroups in the delta store that have less than one million rows.

Vuelva a generar una partición después de cargar los datos:Rebuild a partition after loading data:

  • Esto garantiza que todos los datos se almacenan en el almacén de columnas.This ensures all data is stored in the columnstore. Cuando cada proceso simultáneo carga al mismo tiempo menos de 100 000 filas en la misma partición, esta puede acabar con varios almacenes delta.When concurrent processes each load less than 100,000 rows into the same partition at the same time, the partition can end up with multiple delta stores. La regeneración trasladará todas las filas del almacén delta al almacén de columnas.Rebuilding will move all delta store rows into the columnstore.

Consideraciones específicas para reorganizar un índice de almacén de columnasConsiderations specific to reorganizing a columnstore index

Al reorganizar un índice de almacén de columnas, Motor de base de datosDatabase Engine comprime cada grupo de filas delta con el estado CLOSED en el almacén de columnas como un grupo de filas comprimido.When reorganizing a columnstore index, the Motor de base de datosDatabase Engine compresses each CLOSED delta rowgroup into the columnstore as a compressed rowgroup. A partir de SQL Server 2016 (13.x)SQL Server 2016 (13.x) y en Base de datos SQL de AzureAzure SQL Database, el comando REORGANIZE realiza estas otras optimizaciones de desfragmentación en línea:Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) and in Base de datos SQL de AzureAzure SQL Database, the REORGANIZE command 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, Motor de base de datosDatabase Engine 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, the Motor de base de datosDatabase Engine 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. Motor de base de datosDatabase Engine favorece la opción de combinar estos dos grupos de filas para comprimir un nuevo grupo de filas que tenga 909 830 filas.The Motor de base de datosDatabase Engine favors combining these two rowgroups to compress a new rowgroup that has 909,830 rows.

Después de realizar cargas de datos, puede haber varios grupos de filas pequeños en el almacén delta.After performing data loads, you can have multiple small rowgroups in the delta store. Puede usar ALTER INDEX REORGANIZE para forzar a todos los grupos de filas al almacén de columnas y luego combinar los grupos de filas en menos grupos de filas con más filas.You can use ALTER INDEX REORGANIZE to force all of the rowgroups into the columnstore, and then to combine the rowgroups into fewer rowgroups with more rows. La operación de reorganización también quitará las filas que se hayan eliminado del almacén de columnas.The reorganize operation will also remove rows that have been deleted from the columnstore.

Limitaciones y restriccionesLimitations and restrictions

Los índices de almacén de filas que tienen más de 128 extensiones se vuelven a generar en dos fases independientes: lógica y física.Rowstore indexes with more than 128 extents are rebuilt in two separate phases: logical and physical. En la fase lógica, las unidades de asignación existentes que utiliza el índice están señaladas para cancelación de asignación las filas de datos se copian y ordenan y luego se mueven a las nuevas unidades de asignación creadas para almacenar el índice recompilado.In the logical phase, the existing allocation units used by the index are marked for deallocation, the data rows are copied and sorted, then moved to new allocation units created to store the rebuilt index. En la fase física, las unidades de asignación previamente señaladas para cancelación de asignación se quitan físicamente de las transacciones breves que se realizan en segundo plano y no requieren demasiados bloqueos.In the physical phase, the allocation units previously marked for deallocation are physically dropped in short transactions that happen in the background, and do not require many locks. Para obtener más información acerca de las extensiones, consulte la Guía de arquitectura de páginas y extensiones.For more information about extents, refer to the Pages and Extents Architecture Guide.

La instrucción ALTER INDEX REORGANIZE requiere que el archivo de datos que contiene el índice tenga espacio disponible, ya que la operación solo puede asignar páginas de trabajo temporales en el mismo archivo, no en otro archivo del grupo de archivos.The ALTER INDEX REORGANIZE statement requires the data file containing the index to have space available, because the operation can only allocate temporary work pages on the same file, not another file within the filegroup. Debido a esto, aunque el grupo de archivos tenga páginas libres disponibles, puede que al usuario le siga apareciendo el error 1105: Could not allocate space for object '###' in database '###' because the '###' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.So although the filegroup might have free pages available, the user can still encounter error 1105: Could not allocate space for object '###' in database '###' because the '###' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.

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. Microsoft recomienda usar solo índices alineados cuando el número de particiones sea superior a 1000.Microsoft recommends using only aligned indexes when the number of partitions exceed 1,000.

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.

Cuando se crea o se vuelve a generar un índice en SQL ServerSQL Server, las estadísticas se crean o se actualizan tras examinar 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 o actualizan 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 or updated 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.

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.

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.

Hasta SQL Server 2017 (14.x)SQL Server 2017 (14.x), la regeneración de un índice de almacén de columnas agrupado es una operación sin conexión.Up to SQL Server 2017 (14.x)SQL Server 2017 (14.x), rebuilding a clustered columnstore index is an offline operation. Motor de base de datosDatabase Engine tiene que adquirir un bloqueo exclusivo en la tabla o la partición mientras se produce la regeneración.The Motor de base de datosDatabase Engine has to acquire an exclusive lock on the table or partition while the rebuild occurs. Los datos están sin conexión y no se encuentran disponibles durante el proceso, incluso si se usa NOLOCK, el aislamiento de instantánea de lectura confirmada (RCSI) o el aislamiento de instantánea.The data is offline and unavailable during the rebuild even when using NOLOCK, Read-committed Snapshot Isolation (RCSI), or Snapshot Isolation.
A partir de SQL Server 2019 (15.x)SQL Server 2019 (15.x), se puede volver a generar un índice de almacén de columnas agrupado mediante la opción ONLINE=ON.Starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x), a clustered columnstore index can be rebuilt using the ONLINE=ON option.

Para una tabla de Azure SQL Data Warehouse con un índice de almacén de columnas agrupado ordenado, ALTER INDEX REBUILD reordenará los datos mediante el uso de TempDB.For an Azure SQL Data Warehouse table with an ordered clustered columnstore index, ALTER INDEX REBUILD will re-sort the data using TempDB. Supervise TempDB durante las operaciones de regeneración.Monitor TempDB during rebuild operations. Si necesita más espacio en TempDB, escale verticalmente el almacenamiento de datos.If you need more TempDB space, scale up the data warehouse. Vuelva a reducirlo verticalmente una vez completada la recompilación del índice.Scale back down once the index rebuild is complete.

Para una tabla de Azure SQL Data Warehouse con un índice de almacén de columnas agrupadas ordenado, ALTER INDEX REORGANIZE no reordenará los datos.For an Azure SQL Data Warehouse table with an ordered clustered columnstore index, ALTER INDEX REORGANIZE does not re-sort the data. Para reordenar los datos, use ALTER INDEX REBUILD.To resort the data use ALTER INDEX REBUILD.

SeguridadSecurity

PermisosPermissions

Debe tener un permiso de ALTER sobre la tabla o vista.Requires ALTER permission on the table or view. El usuario debe ser miembro de al menos uno de los siguientes roles:User must be a member of at least one of the following roles:

  • Rol de base de datos db_ddladmin1db_ddladmin database role 1
  • Rol de base de datos db_ownerdb_owner database role
  • Rol de servidor sysadminsysadmin server role

1El rol de base de datos db_ddladmin es el que tiene menos privilegios.1db_ddladmin database role is the least privileged.

Comprobación de la fragmentación de un índice con SQL Server Management StudioSQL Server Management StudioCheck index fragmentation using SQL Server Management StudioSQL Server Management Studio

Nota

No se puede usar Management StudioManagement Studio para calcular la fragmentación de los índices de almacén de columnas.Management StudioManagement Studio cannot be used to compute fragmentation of columnstore indexes. Use el ejemplo de Transact-SQLTransact-SQL siguiente.Use the Transact-SQLTransact-SQL example below.

  1. En el Explorador de objetos, expanda la base de datos que contiene la tabla en la que quiera comprobar la fragmentación de un índice.In Object Explorer, Expand the database that contains the table on which you want to check an index's fragmentation.

  2. Expanda la carpeta Tablas .Expand the Tables folder.

  3. Expanda la tabla en la que quiera comprobar la fragmentación de un índice.Expand the table on which you want to check an index's fragmentation.

  4. Expanda la carpeta Índices .Expand the Indexes folder.

  5. Haga clic con el botón derecho en el índice en el que quiere comprobar la fragmentación y seleccione Propiedades.Right-click the index of which you want to check the fragmentation and select Properties.

  6. Bajo Seleccionar una página, seleccione Fragmentación.Under Select a page, select Fragmentation.

    La siguiente información está disponible en la página Fragmentación :The following information is available on the Fragmentation page:

    Llenado de página Page fullness
    Indica el promedio de llenado de las páginas de índice como un porcentaje.Indicates average fullness of the index pages, as a percentage. 100% indica que las páginas de índice están completamente llenas.100% means the index pages are completely full. 50% indica que, como promedio, las páginas de índice están llenas a la mitad.50% means that, on average, each index page is half full.

    Fragmentación total: porcentaje de fragmentación lógica.Total fragmentation The logical fragmentation percentage. Indica el número de páginas de un índice que no están almacenadas en orden.This indicates the number of pages in an index that are not stored in order.

    Promedio de tamaño de fila Average row size
    Tamaño medio de una fila de nivel hoja.The average size of a leaf-level row.

    Profundidad Depth
    Número de niveles del índice, incluido el nivel hoja.The number of levels in the index, including the leaf-level.

    Registros reenviados Forwarded records
    Número de registros de un montón que han reenviado punteros a otra ubicación de datos.The number of records in a heap that have forward pointers to another data location. Este estado se produce durante una actualización, cuando no existe suficiente espacio para almacenar la nueva fila en la ubicación original.(This state occurs during an update, when there is not enough room to store the new row in the original location.)

    Filas fantasma Ghost rows
    Número de filas marcadas como eliminadas que todavía no se han quitado.The number of rows that are marked as deleted but not yet removed. Estas filas se quitarán en un subproceso de limpieza, cuando el servidor no esté ocupado.These rows will be removed by a clean-up thread, when the server is not busy. Este valor no incluye las filas que se retienen debido a una transacción pendiente de aislamiento de instantáneas.This value does not include rows that are being retained due to an outstanding snapshot isolation transaction.

    Tipo de índice Index type
    Tipo de índice.The type of index. Los valores posibles son Índice clúster, Índice no clústery XML principal.Possible values are Clustered index, Nonclustered index, and Primary XML. Las tablas también se pueden almacenar como un montón (sin índices), pero en tal caso la página Propiedades del índice no puede abrirse.Tables can also be stored as a heap (without indexes), but then this Index Properties page cannot be opened.

    Filas de nivel de hoja Leaf-level rows
    Número de filas de nivel hoja.The number of leaf-level rows.

    Tamaño máximo de la fila Maximum row size
    Tamaño máximo de la fila de nivel de hoja.The maximum leaf-level row size.

    Tamaño mínimo de la fila Minimum row size
    Tamaño mínimo de la fila de nivel de hoja.The minimum leaf-level row size.

    Páginas Pages
    Número total de páginas de datos.The total number of data pages.

    Id. de partición Partition ID
    Id. de partición del árbol b que contiene el índice.The partition ID of the b-tree containing the index.

    Filas fantasma de la versión Version ghost rows
    Número de registros fantasma que se retienen debido a una transacción de aislamiento de instantánea pendiente.The number of ghost records that are being retained due to an outstanding snapshot isolation transaction.

Comprobación de la fragmentación de un índice con Transact-SQLTransact-SQLCheck index fragmentation using Transact-SQLTransact-SQL

Para comprobar la fragmentación de un índice de almacén de filasTo check the fragmentation of a rowstore index

En el ejemplo siguiente, se encuentra el porcentaje de fragmentación promedio de todos los índices de la tabla HumanResources.Employee de la base de datos AdventureWorks2016.The following example finds the average fragmentation percentage of all indexes in the HumanResources.Employee table in the AdventureWorks2016 database.

SELECT a.object_id, object_name(a.object_id) AS TableName,
      a.index_id, name AS IndedxName, avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats
    (DB_ID (N'AdventureWorks2016_EXT')
        , OBJECT_ID(N'HumanResources.Employee')
        , NULL
        , NULL
        , NULL) AS a
INNER JOIN sys.indexes AS b
    ON a.object_id = b.object_id
    AND a.index_id = b.index_id;
GO

La instrucción anterior devuelve un conjunto de resultados similar al siguiente.The previous statement returns a result set similar to the following.

object_id   TableName    index_id    IndexName                                             avg_fragmentation_in_percent
----------- ------------ ----------- ----------------------------------------------------- ------------------------------
1557580587  Employee     1           PK_Employee_BusinessEntityID                          0
1557580587  Employee     2           IX_Employee_OrganizationalNode                        0
1557580587  Employee     3           IX_Employee_OrganizationalLevel_OrganizationalNode    0
1557580587  Employee     5           AK_Employee_LoginID                                   66.6666666666667
1557580587  Employee     6           AK_Employee_NationalIDNumber                          50
1557580587  Employee     7           AK_Employee_rowguid                                   0

(6 row(s) affected)

Para más información, consulte sys.dm_db_index_physical_stats.For more information, see sys.dm_db_index_physical_stats.

Para comprobar la fragmentación de un índice de almacén de columnasTo check the fragmentation of a columnstore index

En el ejemplo siguiente, se encuentra el porcentaje de fragmentación promedio de todos los índices de la tabla dbo.FactResellerSalesXL_CCI de la base de datos AdventureWorksDW2016.The following example finds the average fragmentation percentage of all indexes in the dbo.FactResellerSalesXL_CCI table in the AdventureWorksDW2016 database.

SELECT i.object_id,   
    object_name(i.object_id) AS TableName,   
    i.index_id,   
    i.name AS IndexName,  
    100*(ISNULL(SUM(CSRowGroups.deleted_rows),0))/NULLIF(SUM(CSRowGroups.total_rows),0) AS 'Fragmentation'
FROM sys.indexes AS i  
INNER JOIN sys.dm_db_column_store_row_group_physical_stats AS CSRowGroups  
    ON i.object_id = CSRowGroups.object_id 
      AND i.index_id = CSRowGroups.index_id   
WHERE object_name(i.object_id) = 'FactResellerSalesXL_CCI'  
GROUP BY i.object_id, i.index_id, i.name 
ORDER BY object_name(i.object_id), i.name;

La instrucción anterior devuelve un conjunto de resultados similar al siguiente.The previous statement returns a result set similar to the following.

object_id   TableName                   index_id    IndexName                       Fragmentation
----------- --------------------------- ----------- ------------------------------- ---------------
114099447   FactResellerSalesXL_CCI     1           IndFactResellerSalesXL_CCI      0

(1 row(s) affected)

Eliminación de la fragmentación con SQL Server Management StudioSQL Server Management StudioRemove fragmentation using SQL Server Management StudioSQL Server Management Studio

Para reorganizar o volver a generar un índiceTo reorganize or rebuild an index

  1. En el Explorador de objetos, expanda la base de datos que contiene la tabla en la que desea reorganizar un índice.In Object Explorer, Expand the database that contains the table on which you want to reorganize an index.
  2. Expanda la carpeta Tablas .Expand the Tables folder.
  3. Expanda la tabla en la que desea reorganizar un índice.Expand the table on which you want to reorganize an index.
  4. Expanda la carpeta Índices .Expand the Indexes folder.
  5. Haga clic con el botón derecho en el índice que quiera reorganizar y seleccione Reorganizar.Right-click the index you want to reorganize and select Reorganize.
  6. En el cuadro de diálogo Reorganizar índices , compruebe que el índice correcto se encuentra en la cuadrícula Índices que se van a reorganizar y haga clic en Aceptar.In the Reorganize Indexes dialog box, verify that the correct index is in the Indexes to be reorganized grid and click OK.
  7. Active la casilla Compactar datos de columnas de objetos de gran tamaño para especificar que se compacten también todas las páginas que contengan datos de objetos grandes (LOB).Select the Compact large object column data check box to specify that all pages that contain large object (LOB) data are also compacted.
  8. Haga clic en Aceptar.Click OK.

Nota

La reorganización de un índice de almacén de columnas mediante Management StudioManagement Studio combinará grupos de filas COMPRESSED, pero no obligará a que todos los grupos de filas se compriman en el almacén de columnas.Reorganizing a columnstore index using Management StudioManagement Studio will combine COMPRESSED rowgroups together, but does not force all rowgroups to be compressed into the columnstore. Se comprimirán los grupos de filas con el estado CLOSED, mientras que los grupos de filas con el estado OPEN no se comprimirán en el almacén de columnas.CLOSED rowgroups will be compressed but OPEN rowgroups will not be compressed into the columnstore. Para comprimir todos los grupos de filas, use el ejemplo de Transact-SQLTransact-SQL siguiente.To compress all rowgroups, use the Transact-SQLTransact-SQL example below.

Para reorganizar todos los índices de una tablaTo reorganize all indexes in a table

  1. En el Explorador de objetos, expanda la base de datos que contiene la tabla en la que desea reorganizar los índices.In Object Explorer, Expand the database that contains the table on which you want to reorganize the indexes.
  2. Expanda la carpeta Tablas .Expand the Tables folder.
  3. Expanda la tabla en la que desea reorganizar los índices.Expand the table on which you want to reorganize the indexes.
  4. Haga clic con el botón derecho en la carpeta Índices y seleccione Reorganizar todo.Right-click the Indexes folder and select Reorganize All.
  5. En el cuadro de diálogo Reorganizar índices , compruebe que los índices adecuados están en Índices que se van a reorganizar.In the Reorganize Indexes dialog box, verify that the correct indexes are in the Indexes to be reorganized. Para quitar un índice de la cuadrícula Índices que se van a reorganizar , seleccione el índice y, a continuación, presione la tecla SUPR.To remove an index from the Indexes to be reorganized grid, select the index and then press the Delete key.
  6. Active la casilla Compactar datos de columnas de objetos de gran tamaño para especificar que se compacten también todas las páginas que contengan datos de objetos grandes (LOB).Select the Compact large object column data check box to specify that all pages that contain large object (LOB) data are also compacted.
  7. Haga clic en Aceptar.Click OK.

Para volver a generar un índiceTo rebuild an index

  1. En el Explorador de objetos, expanda la base de datos que contiene la tabla en la que desea reorganizar un índice.In Object Explorer, Expand the database that contains the table on which you want to reorganize an index.
  2. Expanda la carpeta Tablas .Expand the Tables folder.
  3. Expanda la tabla en la que desea reorganizar un índice.Expand the table on which you want to reorganize an index.
  4. Expanda la carpeta Índices .Expand the Indexes folder.
  5. Haga clic con el botón derecho en el índice que quiera reorganizar y seleccione Volver a generar.Right-click the index you want to reorganize and select Rebuild.
  6. En el cuadro de diálogo Volver a generar índices , compruebe que el índice correcto se encuentra en la cuadrícula Índices que se van a volver a generar y haga clic en Aceptar.In the Rebuild Indexes dialog box, verify that the correct index is in the Indexes to be rebuilt grid and click OK.
  7. Active la casilla Compactar datos de columnas de objetos de gran tamaño para especificar que se compacten también todas las páginas que contengan datos de objetos grandes (LOB).Select the Compact large object column data check box to specify that all pages that contain large object (LOB) data are also compacted.
  8. Haga clic en Aceptar.Click OK.

Eliminación de la fragmentación con Transact-SQLTransact-SQLRemove fragmentation using Transact-SQLTransact-SQL

Nota

Para obtener más ejemplos sobre el uso de Transact-SQLTransact-SQL para volver a generar o reorganizar los índices, vea Ejemplos de ALTER INDEX: índices de almacén de columnas y Ejemplos de ALTER INDEX: índices de almacén de filas.For more examples about using Transact-SQLTransact-SQL to rebuild or reorganize indexes, see ALTER INDEX Examples: Columnstore Indexes and ALTER INDEX Examples: Rowstore Indexes.

Para reorganizar un índice fragmentadoTo reorganize a fragmented index

En el siguiente ejemplo se reorganiza el índice IX_Employee_OrganizationalLevel_OrganizationalNode en la tabla HumanResources.Employee de la base de datos AdventureWorks2016.The following example reorganizes the IX_Employee_OrganizationalLevel_OrganizationalNode index on the HumanResources.Employee table in the AdventureWorks2016 database.

ALTER INDEX IX_Employee_OrganizationalLevel_OrganizationalNode
   ON HumanResources.Employee
   REORGANIZE;

En el siguiente ejemplo se reorganiza el índice de almacén de columnas IndFactResellerSalesXL_CCI en la tabla dbo.FactResellerSalesXL_CCI de la base de datos AdventureWorksDW2016.The following example reorganizes the IndFactResellerSalesXL_CCI columnstore index on the dbo.FactResellerSalesXL_CCI table in the AdventureWorksDW2016 database.

-- This command will force all CLOSED and OPEN rowgroups into the columnstore.  
ALTER INDEX IndFactResellerSalesXL_CCI 
   ON FactResellerSalesXL_CCI   
   REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON); 

Para reorganizar todos los índices de una tablaTo reorganize all indexes in a table

En el siguiente ejemplo se reorganizan todos los índices en la tabla HumanResources.Employee de la base de datos AdventureWorks2016.The following example reorganizes all indexes on the HumanResources.Employee table in the AdventureWorks2016 database.

ALTER INDEX ALL ON HumanResources.Employee
   REORGANIZE;

Para volver a generar un índice fragmentadoTo rebuild a fragmented index

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

ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.Employee
REBUILD
;

Para volver a generar todos los índices de una tablaTo rebuild all indexes in a table

En el ejemplo siguiente se vuelven a generar todos los índices asociados con la tabla de la base de datos de AdventureWorks2016 mediante la palabra clave ALL.The following example rebuilds all indexes associated with the table in the AdventureWorks2016 database using the ALL keyword. Se especifican tres opciones.Three options are specified.

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

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

Administración automática de índice y estadísticasAutomatic index and statistics management

Aproveche soluciones como la desfragmentación de índice adaptable para administrar automáticamente las actualizaciones de estadísticas y la desfragmentación de índices para una o varias bases de datos.Leverage solutions such as Adaptive Index Defrag to automatically manage index defragmentation and statistics updates for one or more databases. Este procedimiento elige automáticamente si se debe volver a generar o reorganizar un índice según su nivel de fragmentación, entre otros parámetros y actualiza las estadísticas con un umbral lineal.This procedure automatically chooses whether to rebuild or reorganize an index according to its fragmentation level, amongst other parameters, and update statistics with a linear threshold.

Consulte tambiénSee Also

Guía de diseño y de arquitectura de índices de SQL Server SQL Server Index Architecture and Design Guide
Realizar operaciones de índice en líneaPerform Index Operations Online
ALTER INDEX (Transact-SQL) ALTER INDEX (Transact-SQL)
Desfragmentación de índice adaptable Adaptive Index Defrag
CREATE STATISTICS (Transact-SQL) CREATE STATISTICS (Transact-SQL)
UPDATE STATISTICS (Transact-SQL) UPDATE STATISTICS (Transact-SQL)
Rendimiento de las consultas de índices de almacén de columnas Columnstore Indexes Query Performance
Introducción al almacén de columnas para análisis operativos en tiempo real Get started with Columnstore for real-time operational analytics
Índices de almacén de columnas para el almacenamiento de datos Columnstore Indexes for Data Warehousing
Índices de almacén de columnas y directiva de combinación de grupos de filasColumnstore indexes and the merge policy for rowgroups