Novedades de los índices de almacén de columnasColumnstore indexes - what's new

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

Resumen de las características de almacén de columnas disponibles en cada versión de SQL ServerSQL Server y en las últimas versiones de SQL DatabaseSQL Database, SQL Data WarehouseSQL Data Warehouse y Almacenamiento de datos paralelosParallel Data Warehouse.Summary of columnstore features available for each version of SQL ServerSQL Server, and the latest releases of SQL DatabaseSQL Database, SQL Data WarehouseSQL Data Warehouse, and Almacenamiento de datos paralelosParallel Data Warehouse.

Nota

Para SQL DatabaseSQL Database, los índices de almacén de columnas están disponibles en los niveles Premium y Standard de Azure SQL DatabaseAzure SQL Database (S3 y versiones posteriores) y en todos los niveles de núcleo virtual.For SQL DatabaseSQL Database, columnstore indexes are available in Azure SQL DatabaseAzure SQL Database Premium tiers, Standard tiers - S3 and above, and all vCore tiers. Para SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 y versiones posteriores, los índices de almacén de columnas están disponibles en todas las ediciones.For SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 and above, columnstore indexes are available in all editions. Para SQL Server 2016 (13.x)SQL Server 2016 (13.x) (antes de SP1) y versiones anteriores, los índices de almacén de columnas solo están disponibles en Enterprise Edition.For SQL Server 2016 (13.x)SQL Server 2016 (13.x) (before SP1) and earlier versions, columnstore indexes are only available in Enterprise Edition.

Resumen de las características para cada versión del productoFeature Summary for Product Releases

En esta tabla se resumen las características fundamentales de los índices de almacén de columnas y los productos en los que están disponibles.This table summarizes key features for columnstore indexes and the products in which they are available.

Característica de índice de almacén de columnasColumnstore Index Feature SQL Server 2012 (11.x)SQL Server 2012 (11.x) SQL Server 2014 (12.x)SQL Server 2014 (12.x) SQL Server 2016 (13.x)SQL Server 2016 (13.x) SQL Server 2017 (14.x)SQL Server 2017 (14.x) SQL DatabaseSQL Database SQL Data WarehouseSQL Data Warehouse
Ejecución del modo por lotes de consultas multiprocesoBatch mode execution for multi-threaded queries yes yes yes yes yes yes
Ejecución del modo por lotes para las consultas de un solo subprocesoBatch mode execution for single-threaded queries yes yes yes yes
Opción de compresión de archivosArchival compression option yes yes yes yes yes
Aislamiento de instantánea y aislamiento de instantánea de lectura confirmadaSnapshot isolation and read-committed snapshot isolation yes yes yes yes
Especificación del índice de almacén de columnas a la hora de crear una tablaSpecify columnstore index when creating a table yes yes yes yes
Compatibilidad de Always On con índices de almacén de columnasAlways On supports columnstore indexes yes yes yes yes yes yes
Compatibilidad del elemento secundario legible de Always On con índices de almacén de columnas no agrupados de solo lecturaAlways On readable secondary supports read-only nonclustered columnstore index yes yes yes yes yes yes
Compatibilidad del elemento secundario legible de Always On con índices de almacén de columnas actualizablesAlways On readable secondary supports updateable columnstore indexes yes yes
Índice de almacén de columnas no agrupado de solo lectura en árbol B o montónRead-only nonclustered columnstore index on heap or B-tree yes yes 1yes 1 1yes 1 1yes 1 1yes 1
Índice de almacén de columnas no agrupado actualizable en árbol B o montónUpdateable nonclustered columnstore index on heap or B-tree yes yes yes yes
Índices de árbol B adicionales permitidos en un montón o árbol B con índice de almacén de columnas no agrupadoAdditional B-tree indexes allowed on a heap or B-tree that has a nonclustered columnstore index yes yes yes yes yes yes
Índice de almacén de columnas agrupado actualizableUpdateable clustered columnstore index yes yes yes yes yes
Índice de árbol B en índice de almacén de columnas agrupadoB-tree index on a clustered columnstore index yes yes yes yes
Índice de almacén de columnas en una tabla optimizada para memoriaColumnstore index on a memory-optimized table yes yes yes yes
Compatibilidad de la definición del índice de almacén de columnas no agrupado con el uso de una condición filtradaNonclustered columnstore index definition supports using a filtered condition yes yes yes yes
Opción de retraso de compresión para los índices de almacén de columnas en CREATE TABLE y ALTER TABLECompression delay option for columnstore indexes in CREATE TABLE and ALTER TABLE yes yes yes yes
El índice de almacén de columnas puede tener una columna calculada no persistenteColumnstore index can have a non-persisted computed column yes

1 Para crear un índice de almacén de columnas no agrupado de solo lectura, almacénelo en un grupo de archivos de solo lectura.1 To create a read-only nonclustered columnstore index, store the index on a read-only filegroup.

SQL Server 2017 (14.x)SQL Server 2017 (14.x)

SQL Server 2017 (14.x)SQL Server 2017 (14.x) agrega estas nuevas características.adds these new features.

FuncionesFunctional

  • SQL Server 2017 (14.x)SQL Server 2017 (14.x) admite columnas calculadas no persistentes en índices de almacén de columnas agrupados.supports non-persisted computed columns in clustered columnstore indexes. No se admiten columnas persistentes en índices de almacén de columnas agrupados.Persisted computed columns are not supported in clustered columnstore indexes. No se puede crear un índice no agrupado en un índice de almacén columnas con una columna calculada.You cannot create a nonclustered index on a columnstore index that has a computed column.

SQL Server 2016 (13.x)SQL Server 2016 (13.x)

SQL Server 2016 (13.x)SQL Server 2016 (13.x) incorpora mejoras esenciales destinadas a mejorar el rendimiento y la flexibilidad de los índices de almacén de columnas.adds key enhancements to improve the performance and flexibility of columnstore indexes. Estas mejoras optimizan los escenarios de almacenamiento de datos y facilitan los análisis operativos en tiempo real.These improvements enhance data warehousing scenarios and enable real-time operational analytics.

FuncionesFunctional

  • Una tabla de almacén de filas puede contar con un índice de almacén de columnas no agrupado actualizable.A rowstore table can have one updateable nonclustered columnstore index. Antes, el índice de almacén de columnas no agrupado era de solo lectura.Previously, the nonclustered columnstore index was read-only.

  • La definición del índice de almacén de columnas no agrupado admite el uso de una condición de filtrado.The nonclustered columnstore index definition supports using a filtered condition. Para minimizar el impacto de rendimiento que tiene agregar un índice de almacén de columnas a una tabla OLTP, use una condición de filtrado para crear un índice de almacén de columnas no agrupado únicamente en los datos inactivos de la carga de trabajo operativa.To minimize the performance impact of adding a columnstore index on an OLTP table, use a filtered condition to create a nonclustered columnstore index on only the cold data of your operational workload.

  • Las tablas en memoria pueden tener un índice de almacén de columnas.An in-memory table can have one columnstore index. Puede crearlo cuando se genere la tabla o agregarlo en otro momento con ALTER TABLE (Transact-SQL).You can create it when the table is created or add it later with ALTER TABLE (Transact-SQL). Antes, solo las tablas basadas en disco podían contar con un índice de almacén de columnas.Previously, only a disk-based table could have a columnstore index.

  • Un índice de almacén de columnas agrupado puede tener uno o varios índices de almacén de filas no agrupados.A clustered columnstore index can have one or more nonclustered rowstore indexes. Antes, el índice de almacén de columnas no admitía índices no agrupados.Previously, the columnstore index did not support nonclustered indexes. SQL ServerSQL Server mantiene automáticamente los índices no agrupados para las operaciones DML.automatically maintains the nonclustered indexes for DML operations.

  • Compatibilidad con las claves principales y claves externas mediante un índice de árbol B para aplicar estas restricciones en un índice de almacén de columnas agrupado.Support for primary keys and foreign keys by using a B-tree index to enforce these constraints on a clustered columnstore index.

  • Los índices de almacén de columnas tienen una opción de retraso de compresión que minimiza el impacto de la carga de trabajo transaccional en los análisis operativos en tiempo real.Columnstore indexes have a compression delay option that minimizes the impact of the transactional workload on real-time operational analytics. Esta opción permite cambiar con frecuencia filas para estabilizarlas antes de comprimirlas en el almacén de columnas.This option allows for frequently changing rows to stabilize before compressing them into the columnstore. Para más información, vea CREATE COLUMNSTORE INDEX (Transact-SQL) e Introducción al almacén de columnas para análisis operativos en tiempo real.For details, see CREATE COLUMNSTORE INDEX (Transact-SQL) and Get started with Columnstore for real-time operational analytics.

Rendimiento del nivel de compatibilidad de base de datos 120 o 130Performance for database compatibility level 120 or 130

  • Los índices de almacén de columnas admiten el nivel de aislamiento de instantánea de lectura confirmada (RCSI) y el aislamiento de instantánea (SI).Columnstore indexes support read committed snapshot isolation level (RCSI) and snapshot isolation (SI). De esta forma, se pueden realizar consultas de análisis homogéneas transaccionales sin ningún bloqueo.This enables transactional consistent analytics queries with no locks.

  • El almacén de columnas admite con la desfragmentación de índices mediante la eliminación de filas suprimidas sin necesidad de volver a generar el índice explícitamente.Columnstore supports index defragmentation by removing deleted rows without the need to explicitly rebuild the index. La instrucción ALTER INDEX ... REORGANIZE quita las filas eliminadas, según una directiva definida internamente, del almacén de columnas como una operación en líneaThe ALTER INDEX ... REORGANIZE statement removes deleted rows, based on an internally defined policy, from the columnstore as an online operation

  • Es posible acceder a los índices de almacén de columnas en una réplica secundaria legible de AlwaysOn.Columnstore indexes can be access on an AlwaysOn readable secondary replica. Puede optimizar el rendimiento de los análisis operativos descargando consultas de análisis en una réplica secundaria de AlwaysOn.You can improve performance for operational analytics by offloading analytics queries to an AlwaysOn secondary replica.

  • Para mejorar el rendimiento, SQL ServerSQL Server calcula las funciones de agregado MIN, MAX, SUM, COUNT y AVG durante los recorridos de tabla cuando el tipo de datos usa un máximo de ocho bytes (y no es de cadena).To improve performance, SQL ServerSQL Server computes the aggregate functions MIN, MAX, SUM, COUNT, and AVG during table scans when the data type uses no more than 8 bytes, and is not of a string type. Se admite la aplicación de agregado con o sin la cláusula Agrupar por tanto para los índices de almacén de columnas agrupados como para los no agrupados.Aggregate pushdown is supported with or without Group By clause for both clustered columnstore indexes and nonclustered columnstore indexes.

  • La aplicación de predicado acelera las consultas que comparan cadenas del tipo [v]archar o n[v]archar.Predicate pushdown speeds up queries that compare strings of type [v]archar or n[v]archar. Esto se aplica a los operadores de comparación habituales y se incluyen operadores que utilizan filtros de mapa de bits, como LIKE.This applies to the common comparison operators and includes operators such as LIKE that use bitmap filters. Además, funciona con todas las intercalaciones que admite SQL Server.This works with all collations that SQL Server supports.

Rendimiento del nivel de compatibilidad de base de datos 130Performance for database compatibility level 130

  • El modo de ejecución por lotes admite ahora consultas con cualquiera de estas operaciones:New batch mode execution support for queries using any of these operations:
    • SORTSORT
    • Agregados con varias funciones distintas.Aggregates with multiple distinct functions. Algunos ejemplos: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP.Some examples: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP.
    • Funciones de agregado de ventana: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX y CLR.Window aggregate functions: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX, and CLR.
    • Agregados definidos por el usuario de ventana: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARP y GROUPING.Window user-defined aggregates: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARP, and GROUPING.
    • Funciones analíticas de agregado de ventana: LAG, LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DIST y PERCENT_RANK.Window aggregate analytic functions: LAG, LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DIST, and PERCENT_RANK.
  • Las consultas de un solo proceso que se ejecuten con MAXDOP 1 o un plan de consulta en serie se ejecutarán en el modo por lotes.Single-threaded queries running under MAXDOP 1 or with a serial query plan execute in batch mode. Antes, solo las consultas multiproceso se ejecutaban por lotes.Previously-only multi-threaded queries ran with batch execution.
  • Las consultas de tabla con optimización para memoria pueden tener planes paralelos en el modo de interoperabilidad de SQL a la hora de acceder a datos de índices de almacén de columnas o almacén de filas.Memory optimized table queries can have parallel plans in SQL InterOp mode both when accessing data in rowstore or in columnstore index

CompatibilidadSupportability

Las siguientes vistas del sistema son nuevas para el almacén de columnas:These system views are new for columnstore:

sys.column_store_row_groups (Transact-SQL)sys.column_store_row_groups (Transact-SQL) sys.dm_column_store_object_pool (Transact-SQL)sys.dm_column_store_object_pool (Transact-SQL)
sys.dm_db_column_store_row_group_operational_stats (Transact-SQL)sys.dm_db_column_store_row_group_operational_stats (Transact-SQL) sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)
sys.dm_db_index_operational_stats (Transact-SQL)sys.dm_db_index_operational_stats (Transact-SQL) sys.dm_db_index_physical_stats (Transact-SQL)sys.dm_db_index_physical_stats (Transact-SQL)
sys.internal_partitions (Transact-SQL)sys.internal_partitions (Transact-SQL)

Estas DMV basadas en OLTP en memoria contienen actualizaciones para el almacén de columnas:These in-memory OLTP-based DMVs contain updates for columnstore:

sys.dm_db_xtp_hash_index_stats (Transact-SQL)sys.dm_db_xtp_hash_index_stats (Transact-SQL) sys.dm_db_xtp_index_stats (Transact-SQL)sys.dm_db_xtp_index_stats (Transact-SQL)
sys.dm_db_xtp_memory_consumers (Transact-SQL)sys.dm_db_xtp_memory_consumers (Transact-SQL) sys.dm_db_xtp_nonclustered_index_stats (Transact-SQL)sys.dm_db_xtp_nonclustered_index_stats (Transact-SQL)
sys.dm_db_xtp_object_stats (Transact-SQL)sys.dm_db_xtp_object_stats (Transact-SQL) sys.dm_db_xtp_table_memory_stats (Transact-SQL)sys.dm_db_xtp_table_memory_stats (Transact-SQL)

LimitacionesLimitations

  • En el caso de las tablas en memoria, los índices de almacén de columnas deben incluir todas las columnas; estos no pueden tener una condición de filtrado.For in-memory tables, a columnstore index must include all the columns; the columnstore index cannot have a filtered condition.
  • Para las tablas en memoria, las consultas de índices de almacén de columnas se ejecutan únicamente en el modo de interoperabilidad y no en el modo nativo en memoria.For in-memory tables, queries on columnstore indexes run only in InterOP mode, and not in the in-memory native mode. Se admite la ejecución en paralelo.Parallel execution is supported.

SQL Server 2014 (12.x)SQL Server 2014 (12.x)

SQL Server 2014 (12.x)SQL Server 2014 (12.x) introdujo el índice de almacén de columnas agrupadas como el formato de almacenamiento principal.introduced the clustered column store index as the primary storage format. Este permitía cargas regulares, así como operaciones de actualización, eliminación e inserción.This allowed regular loads as well as update, delete, and insert operations.

  • La tabla puede utilizar un índice de almacén de columnas agrupadas como el almacenamiento de tabla principal.The table can use a clustered column store index as the primary table storage. No se permite ningún otro índice en la tabla, pero el índice de almacén de columnas agrupado se puede actualizar. De este modo, se pueden realizar cargas regulares y efectuar cambios en filas individuales.No other indexes are allowed on the table, but the clustered column store index is updateable so you can perform regular loads and make changes to individual rows.
  • Los índices de almacén de columnas no agrupados siguen presentando la misma funcionalidad que en SQL Server 2012 (11.x)SQL Server 2012 (11.x), excepto en lo concerniente a los operadores adicionales que se pueden ejecutar en el modo por lotes.The nonclustered column store index continues to have the same functionality as in SQL Server 2012 (11.x)SQL Server 2012 (11.x) except for additional operators that can now be executed in batch mode. Aún no se pueden actualizar, a menos que se reconstruyan o se utilice la modificación de las particiones.It is still not updateable except by rebuilding, and by using partition switching. Los índices de almacén de columnas solo son compatibles en las tablas basadas en disco y no en las tablas en memoria.The nonclustered columnstore index is supported on disk-based tables only, and not on in-memory tables.
  • Los índices de almacén de columnas agrupados y no agrupados cuentan con una opción de compresión de archivos que comprimen aún más los datos.The clustered and nonclustered column store index has an archival compression option that further compresses the data. La opción de archivos resulta útil para reducir el tamaño de los datos en memoria y en disco, pero repercute negativamente en el rendimiento de las consultas.The archival option is useful for reducing the data size both in memory and on disk, but does slow query performance. Funciona bien para los datos a los que se accede con poca frecuencia.It works well for data that is accessed infrequently.
  • Los índices de almacén de columnas agrupados y no agrupados funcionan de una manera muy similar; utilizan el mismo formato de almacenamiento en columnas, el mismo motor de procesamiento de consultas y el mismo conjunto de vistas de administración dinámica.The clustered columnstore index and the nonclustered columnstore index function in a very similar way; they use the same columnar storage format, same query processing engine, and the same set of dynamic management views. La diferencia radica en los tipos de índices primarios frente a los secundarios; además, el índice de almacén de columnas no agrupado es de solo lectura.The difference is primary versus secondary index types, and the nonclustered columnstore index is read-only.
  • Estos operadores se ejecutan en modo por lotes de consultas multiproceso: SCAN, FILTER, PROJECT, JOIN, GROUP BY y UNION ALL.These operators run in batch mode for multi-threaded queries: scan, filter, project, join, group by, and union all.

SQL Server 2012 (11.x)SQL Server 2012 (11.x)

SQL Server 2012 (11.x)SQL Server 2012 (11.x) introdujo el índice de almacén de columnas no agrupado como otro tipo de índice en las tablas de almacén de filas y el procesamiento por lotes para las consultas de los datos de almacén de columnas.introduced the nonclustered columnstore index as another index type on rowstore tables and batch processing for queries on columnstore data.

  • Una tabla de almacén de filas puede contar con un índice de almacén de columnas no agrupado.A rowstore table can have one nonclustered columnstore index.
  • El índice de almacén de columnas es de solo lectura.The columnstore index is read-only. Después de crear el índice de almacén, no se puede actualizar la tabla mediante las operaciones INSERT, DELETE y UPDATE; para realizar estas operaciones debe quitar el índice, actualizar la tabla y reconstruir el índice de almacén de columnas.After you create the columnstore index, you cannot update the table by INSERT, DELETE, and UPDATE operations; to perform these operations you must drop the index, update the table and rebuild the columnstore index. Puede cargar datos adicionales en la tabla mediante la modificación de las particiones.You can load additional data into the table by using partition switching. La ventaja de la modificación de las particiones es que puede cargar datos sin quitar y reconstruir el índice de almacén de columnas.The advantage of partition switching is you can load data without dropping and rebuilding the columnstore index.
  • El índice de almacén de columnas siempre necesita almacenamiento adicional, normalmente un 10 % más que el almacén de filas, ya que almacena una copia de los datos.The column store index always requires extra storage, typically an additional 10% over rowstore, because it stores a copy of the data.
  • El procesamiento por lotes se traduce en que las consultas rinden el doble de bien o mejor, pero solo está disponible para la ejecución de consultas en paralelo.Batch processing provides 2x or better query performance, but it is only available for parallel query execution.

Consulte tambiénSee Also

Guía de diseño de índices de almacén de columnas Columnstore Indexes Design Guidance
Guía de carga de datos de los índices de almacén de columnas Columnstore Indexes Data Loading Guidance
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
Reorganizar y volver a generar índicesReorganize and Rebuild Indexes