Indici columnstore - NovitàColumnstore indexes - what's new

QUESTO ARGOMENTO SI APPLICA A: sìSQL ServersìDatabase SQL di AzuresìAzure SQL Data Warehouse sìParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Riepilogo delle funzionalità columnstore disponibili per ogni versione di SQL ServerSQL Server e per la versione più recente di Database SQLSQL Database, SQL Data WarehouseSQL Data Warehouse e Parallel Data WarehouseParallel Data Warehouse.Summary of columnstore features available for each version of SQL ServerSQL Server, and the latest releases of Database SQLSQL Database, SQL Data WarehouseSQL Data Warehouse, and Parallel Data WarehouseParallel Data Warehouse.

Nota

Per Database SQLSQL Database, gli indici columnstore sono disponibili nei livelli Premium e Standard di Database SQL di AzureAzure SQL Database (S3 e versioni successive) e in tutti i livelli vCore.For Database SQLSQL Database, columnstore indexes are available in Database SQL di AzureAzure SQL Database Premium tiers, Standard tiers - S3 and above, and all vCore tiers. Per SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 e versioni successive gli indici columnstore sono disponibili in tutte le edizioni.For SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 and above, columnstore indexes are available in all editions. Per SQL Server 2016 (13.x)SQL Server 2016 (13.x) (versioni precedenti a SP1) e versioni precedenti, gli indici columnstore sono disponibili solo nell'edizione Enterprise.For SQL Server 2016 (13.x)SQL Server 2016 (13.x) (before SP1) and earlier versions, columnstore indexes are only available in Enterprise Edition.

Riepilogo delle funzionalità per le versioni dei prodottiFeature Summary for Product Releases

Questa tabella riepiloga le funzionalità principali per gli indici columnstore e i prodotti in cui sono disponibili.This table summarizes key features for columnstore indexes and the products in which they are available.

Funzionalità indice columnstoreColumnstore 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) Database SQLSQL Database SQL Data WarehouseSQL Data Warehouse
Esecuzione in modalità batch per le query multithreadingBatch mode execution for multi-threaded queries yes yes yes yes yes yes
Esecuzione in modalità batch per le query a thread singoloBatch mode execution for single-threaded queries yes yes yes yes
Opzione di compressione dell'archivioArchival compression option yes yes yes yes yes
Isolamento dello snapshot e dello snapshot Read CommittedSnapshot isolation and read-committed snapshot isolation yes yes yes yes
Specificare l'indice columnstore durante la creazione di una tabellaSpecify columnstore index when creating a table yes yes yes yes
Always On supporta gli indici columnstoreAlways On supports columnstore indexes yes yes yes yes yes yes
Le repliche secondarie leggibili Always On supportano l'indice columnstore non cluster di sola letturaAlways On readable secondary supports read-only nonclustered columnstore index yes yes yes yes yes yes
Le repliche secondarie leggibili Always On supportano gli indici columnstore aggiornabiliAlways On readable secondary supports updateable columnstore indexes yes yes
Indice columnstore non cluster di sola lettura su heap o albero BRead-only nonclustered columnstore index on heap or B-tree yes yes 1yes 1 1yes 1 1yes 1 1yes 1
Indice columnstore non cluster aggiornabile su heap o albero BUpdateable nonclustered columnstore index on heap or B-tree yes yes yes yes
Indici albero B aggiuntivi consentiti su un heap o albero B che dispone di un indice columnstore non clusterAdditional B-tree indexes allowed on a heap or B-tree that has a nonclustered columnstore index yes yes yes yes yes yes
Indice columnstore cluster aggiornabileUpdateable clustered columnstore index yes yes yes yes yes
Indice albero B su un indice columnstore clusterB-tree index on a clustered columnstore index yes yes yes yes
Indice columnstore su una tabella ottimizzata per la memoriaColumnstore index on a memory-optimized table yes yes yes yes
La definizione degli indici columnstore non cluster supporta l'uso di una condizione filtrataNonclustered columnstore index definition supports using a filtered condition yes yes yes yes
Opzione relativa al ritardo di compressione per gli indici columnstore in CREATE TABLE e ALTER TABLECompression delay option for columnstore indexes in CREATE TABLE and ALTER TABLE yes yes yes yes
L'indice columnstore può avere una colonna calcolata non persistenteColumnstore index can have a non-persisted computed column yes

1 Per creare un indice columnstore non cluster di sola lettura, archiviare l'indice in un filegroup di sola lettura.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) aggiunge queste nuove funzionalità. adds these new features.

FunzionaleFunctional

  • SQL Server 2017 (14.x)SQL Server 2017 (14.x) supporta le colonne calcolate non persistenti in indici columnstore cluster. supports non-persisted computed columns in clustered columnstore indexes. Le colonne persistenti non sono supportate negli indici columnstore cluster. Non è possibile creare un indice non cluster in un indice columnstore che contiene una colonna calcolata.Persisted columns are not supported in clustered columnstore indexes.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) aggiunge miglioramenti importanti per aumentare le prestazioni e la flessibilità degli indici columnstore. adds key enhancements to improve the performance and flexibility of columnstore indexes. In questo modo è possibile migliorare gli scenari di data warehouse e abilitare l'analisi operativa in tempo reale.These improvements enhance data warehousing scenarios and enable real-time operational analytics.

FunzionaleFunctional

  • Una tabella rowstore può avere un solo indice columnstore non cluster aggiornabile.A rowstore table can have one updateable nonclustered columnstore index. In precedenza, l'indice columnstore non cluster era di sola lettura.Previously, the nonclustered columnstore index was read-only.

  • La definizione degli indici columnstore non cluster supporta l'uso di una condizione filtrata.The nonclustered columnstore index definition supports using a filtered condition. Per ridurre al minimo l'impatto sulle prestazioni conseguente all'aggiunta di un indice columnstore in una tabella OLTP, usare una condizione filtrata per creare un indice columnstore non cluster solo sui dati usati meno di frequente del carico di lavoro operativo.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.

  • Una tabella in memoria può avere un solo indice columnstore.An in-memory table can have one columnstore index. È possibile crearlo durante la creazione della tabella o aggiungerlo in un secondo momento con ALTER TABLE (Transact-SQL).You can create it when the table is created or add it later with ALTER TABLE (Transact-SQL). In precedenza, solo una tabella basata su disco poteva avere un indice columnstore.Previously, only a disk-based table could have a columnstore index.

  • Un indice columnstore cluster può avere uno o più indici rowstore non cluster.A clustered columnstore index can have one or more nonclustered rowstore indexes. In precedenza, l'indice columnstore non supportava gli indici non cluster.Previously, the columnstore index did not support nonclustered indexes. SQL ServerSQL Server gestisce automaticamente gli indici non cluster per le operazioni DML. automatically maintains the nonclustered indexes for DML operations.

  • Supporto di chiavi primarie e chiavi esterne usando un indice albero B per imporre questi vincoli su un indice columnstore cluster.Support for primary keys and foreign keys by using a B-tree index to enforce these constraints on a clustered columnstore index.

  • Gli indici columnstore hanno un'opzione relativa al ritardo di compressione che riduce al minimo l'impatto che il carico di lavoro transazionale ha sull'analisi operativa in tempo reale.Columnstore indexes have a compression delay option that minimizes the impact of the transactional workload on real-time operational analytics. Questa opzione consente di modificare frequentemente le righe per stabilizzarle prima di comprimerle nel columnstore.This option allows for frequently changing rows to stabilize before compressing them into the columnstore. Per informazioni dettagliate, vedere CREATE COLUMNSTORE INDEX (Transact-SQL) (Creare un indice columnstore (Transact-SQL&#41) e Introduzione a columnstore per l'analisi operativa in tempo reale.For details, see CREATE COLUMNSTORE INDEX (Transact-SQL) and Get started with Columnstore for real-time operational analytics.

Prestazioni per il livello di compatibilità del database 120 o 130Performance for database compatibility level 120 or 130

  • Gli indici columnstore supportano il livello di isolamento dello snapshot Read Committed e l'isolamento dello snapshot.Columnstore indexes support read committed snapshot isolation level (RCSI) and snapshot isolation (SI). Questo consente le query di analisi coerente transazionale senza alcun blocco.This enables transactional consistent analytics queries with no locks.

  • Columnstore supporta la deframmentazione degli indici rimuovendo le righe eliminate senza necessità di ricompilare l'indice in modo esplicito.Columnstore supports index defragmentation by removing deleted rows without the need to explicitly rebuild the index. L'istruzione ALTER INDEX … REORGANIZE rimuove dal columnstore le righe eliminate in base a un criterio definito internamente, con un'operazione onlineThe ALTER INDEX … REORGANIZE statement removes deleted rows, based on an internally defined policy, from the columnstore as an online operation

  • Gli indici columnstore sono accessibili su una replica secondaria leggibile AlwaysOn.Columnstore indexes can be access on an AlwaysOn readable secondary replica. È possibile migliorare le prestazioni per l'analisi operativa ripartendo le query di analisi su una replica secondaria AlwaysOn.You can improve performance for operational analytics by offloading analytics queries to an AlwaysOn secondary replica.

  • Per migliorare le prestazioni, SQL ServerSQL Server calcola le funzioni di aggregazione MIN, MAX, SUM, COUNT e AVG durante le scansioni di tabella quando il tipo di dati usa non più di 8 byte e non è di tipo stringa.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. La distribuzione dell'aggregazione è supportata con o senza clausola GROUP BY sia per gli indici columnstore cluster sia per quelli non cluster.Aggregate pushdown is supported with or without Group By clause for both clustered columnstore indexes and nonclustered columnstore indexes.

  • La distribuzione del predicato consente di velocizzare le query che confrontano le stringhe di tipo [v]archar o n[v]archar.Predicate pushdown speeds up queries that compare strings of type [v]archar or n[v]archar. Questo si applica ai comuni operatori di confronto e include operatori come LIKE che usano i filtri bitmap.This applies to the common comparison operators and includes operators such as LIKE that use bitmap filters. Inoltre, funziona con tutte le regole di confronto supportate da SQL Server.This works with all collations that SQL Server supports.

Prestazioni per il livello di compatibilità del database 130Performance for database compatibility level 130

  • Nuovo supporto dell'esecuzione in modalità batch per le query che usano uno di questi operatori:New batch mode execution support for queries using any of these operations:
    • SORTSORT
    • Funzioni di aggregazione con più funzioni distinte.Aggregates with multiple distinct functions. Alcuni esempi: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP.Some examples: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP.
    • Funzioni di aggregazione della finestra: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX e CLR.Window aggregate functions: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX, and CLR.
    • Funzioni di aggregazione della finestra definite dall'utente: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARP e GROUPING.Window user-defined aggregates: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARP, and GROUPING.
    • Funzioni analitiche di aggregazione della finestra: LAG, LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DIST e PERCENT_RANK.Window aggregate analytic functions: LAG, LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DIST, and PERCENT_RANK.
  • Le query a thread singolo in esecuzione in MAXDOP 1 o con un piano di query seriale vengono eseguite in modalità batch.Single-threaded queries running under MAXDOP 1 or with a serial query plan execute in batch mode. Le query multithreading venivano eseguite in modalità batch solo in precedenza.Previously-only multi-threaded queries ran with batch execution.
  • Le query delle tabelle con ottimizzazione per la memoria possono avere piani paralleli in modalità SQL InterOp durante l'accesso dei dati nell'indice rowstore o columnstore.Memory optimized table queries can have parallel plans in SQL InterOp mode both when accessing data in rowstore or in columnstore index

Facilità di supportoSupportability

Queste viste di sistema sono una novità per columnstore: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)

Queste DMV basate su OLTP in memoria contengono aggiornamenti per columnstore: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)

LimitazioniLimitations

  • Per le tabelle in memoria, un indice columnstore deve includere tutte le colonne; l'indice columnstore non può avere una condizione di filtrata.For in-memory tables, a columnstore index must include all the columns; the columnstore index cannot have a filtered condition.
  • Per le tabelle in memoria, le query sugli indici columnstore vengono eseguite solo in modalità InterOP e non in modalità nativa in memoria.For in-memory tables, queries on columnstore indexes run only in InterOP mode, and not in the in-memory native mode. È supportata l'esecuzione parallela.Parallel execution is supported.

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

SQL Server 2014 (12.x)SQL Server 2014 (12.x) ha introdotto l'indice columnstore cluster come formato di archiviazione primario. introduced the clustered column store index as the primary storage format. Questo ha consentito caricamenti regolari, nonché operazioni di aggiornamento, eliminazione e inserimento.This allowed regular loads as well as update, delete, and insert operations.

  • La tabella può usare un indice columnstore cluster come archiviazione tabella primaria.The table can use a clustered column store index as the primary table storage. Nella tabella non è consentito nessun altro indice, ma l'indice columnstore cluster è aggiornabile, pertanto è possibile eseguire caricamenti regolari e apportare modifiche alle singole righe.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.
  • L'indice columnstore non cluster continua ad avere la stessa funzionalità che aveva in SQL Server 2012 (11.x)SQL Server 2012 (11.x) ad eccezione degli operatori aggiuntivi, che ora possono essere eseguiti in modalità batch.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. Al momento è aggiornabile solo tramite ricompilazione e usando un cambio di partizione.It is still not updateable except by rebuilding, and by using partition switching. L'indice columnstore non cluster è supportato solo nelle tabelle basate su disco e non in quelle in memoria.The nonclustered columnstore index is supported on disk-based tables only, and not on in-memory tables.
  • L'indice columnstore cluster e non cluster ha un'opzione relativa alla compressione dell'archivio che comprime ulteriormente i dati.The clustered and nonclustered column store index has an archival compression option that further compresses the data. L'opzione di archiviazione è utile per ridurre le dimensioni dei dati in memoria e su disco, ma comporta un rallentamento delle prestazioni delle query.The archival option is useful for reducing the data size both in memory and on disk, but does slow query performance. Funziona anche per i dati a cui si accede raramente.It works well for data that is accessed infrequently.
  • L'indice columnstore cluster e quello non cluster funzionano in modo molto simile: usano lo stesso formato di archiviazione a colonne, lo stesso motore di elaborazione delle query e lo stesso insieme di viste di gestione dinamica.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 differenza risiede nei tipi di indice primario e secondario e nel fatto che l'indice columnstore non cluster è di sola lettura.The difference is primary versus secondary index types, and the nonclustered columnstore index is read-only.
  • Questi operatori vengono eseguiti in modalità batch per le query multithreading: SCAN, FILTER, PROJECT, JOIN, GROUP BY e 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) ha introdotto l'indice columnstore non cluster come un altro tipo di indice nelle tabelle rowstore e l'elaborazione batch per le query sui dati columnstore. introduced the nonclustered columnstore index as another index type on rowstore tables and batch processing for queries on columnstore data.

  • Una tabella rowstore può avere un solo indice columnstore non cluster.A rowstore table can have one nonclustered columnstore index.
  • L'indice columnstore è di sola lettura.The columnstore index is read-only. Dopo aver creato l'indice columnstore non è possibile aggiornare la tabella tramite operazioni INSERT, DELETE e UPDATE: per eseguire queste operazioni è necessario eliminare l'indice, aggiornare la tabella e ricompilare l'indice columnstore.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. È possibile caricare dati aggiuntivi nella tabella usando un cambio di partizione.You can load additional data into the table by using partition switching. Il vantaggio del cambio di partizione è che consente di caricare dati senza eliminare e ricompilare l'indice columnstore.The advantage of partition switching is you can load data without dropping and rebuilding the columnstore index.
  • L'indice columnstore richiede sempre memoria aggiuntiva, in genere un ulteriore 10% per rowstore, poiché archivia una copia dei dati.The column store index always requires extra storage, typically an additional 10% over rowstore, because it stores a copy of the data.
  • L'elaborazione batch consente di raddoppiare o migliorare le prestazioni delle query, ma è disponibile solo per l'esecuzione di query parallele.Batch processing provides 2x or better query performance, but it is only available for parallel query execution.

Vedere ancheSee Also

Indici columnstore - Linee guida per la progettazione Columnstore Indexes Design Guidance
Indici columnstore - Linee guida per il caricamento di dati Columnstore Indexes Data Loading Guidance
Prestazioni delle query per gli indici columnstore Columnstore Indexes Query Performance
Introduzione a columnstore per l'analisi operativa in tempo reale Get started with Columnstore for real-time operational analytics
Indici columnstore per il data warehousing Columnstore Indexes for Data Warehousing
Deframmentazione degli indici columnstoreColumnstore Indexes Defragmentation