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

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2012)sìDatabase SQL di AzuresìAzure SQL Data Warehouse sìParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2012)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Riepilogo delle funzionalità columnstore disponibili per ogni versione di SQL ServerSQL Servere per le versioni più recenti del database SQL di Azure Premium Edition, Azure SQL Data Warehouse e Parallel Data Warehouse.Summary of columnstore features available for each version of SQL ServerSQL Server, and the latest releases of Azure SQL Database Premium Edition, Azure SQL Data Warehouse, and Parallel Data Warehouse.

Nota

Per il database SQL di Azure gli indici columnstore sono disponibili solo nella Premium Edition.For Azure SQL Database, columnstore indexes are only available in Premium 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 2012SQL Server 2012 SQL Server 2014SQL Server 2014 SQL Server 2016SQL Server 2016 SQL Server vNextSQL Server vNext Database SQLSQL Database Premium Edition Premium Edition SQL Data WarehouseSQL Data Warehouse
Esecuzione batch per le query multithreadingBatch execution for multi-threaded queries yes yes yes yes yes yes
Esecuzione batch per le query a thread singoloBatch execution for single-threaded queries yes yes yes yes
Opzione relativa alla 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
AlwaysOn supporta gli indici columnstoreAlwaysOn supports columnstore indexes. yes yes yes yes yes yes
Le repliche secondarie leggibili AlwaysOn supportano l'indice columnstore non cluster di sola letturaAlwaysOn readable secondary supports read-only nonclustered columnstore index yes yes yes yes yes yes
Le repliche secondarie leggibili AlwaysOn supportano gli indici columnstore aggiornabiliAlwaysOn 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 btree. yes yes yes yes yes yes
Indice columnstore non cluster aggiornabile su heap o albero BUpdateable nonclustered columnstore index on heap or btree yes yes yes yes
Indici albero b aggiuntivi consentiti su un heap o albero b che dispone di un indice columnstore non clusterAdditional btree indexes allowed on a heap or btree 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 clusterBtree index on a clustered columnstore index. yes yes yes yes
Indice columnstore su una tabella con ottimizzazione 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 persistente.Columnstore index can have a non-persisted computed column. yes

Per creare un indice columnstore non cluster leggibile, archiviare l'indice in un filegroup di sola lettura.To create a readable nonclustered columnstore index, store the index on a read-only filegroup.

SQL Server vNextSQL Server vNext

SQL Server vNextSQL Server vNext aggiunge queste nuove funzionalità. adds these new features.

FunzionaleFunctional

  • SQL Server vNextSQL Server vNext 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 2016SQL Server 2016

SQL Server 2016SQL Server 2016 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 Server gestisce automaticamente gli indici non cluster per le operazioni DML.SQL Server automatically maintains the nonclustered indexes for DML operations.

  • Supporto per le chiavi primarie ed 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 btree 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 …The ALTER INDEX … REORGANIZE rimuove le righe eliminate, in base a un criterio definito internamente, dal columnstore come operazione onlineREORGANIZE 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, 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, 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]char o n[v]char.Predicate pushdown speeds up queries that compare strings of type [v]char or n[v]char. 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 delle finestre: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX e CLR.Window aggregate functions: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX, and CLR.

    • Funzioni di aggregazione delle finestre 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 delle finestre: 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:

LimitazioniLimitations

  • MERGE è disabilitato quando viene definito un indice albero b su un indice columnstore cluster.MERGE is disabled when a btree index is defined on a clustered columnstore index.

  • 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 2014SQL Server 2014

SQL Server 2014 ha introdotto l'indice dell'archivio columnstore cluster come formato di archiviazione primario.SQL Server 2014 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à in SQL Server 2012, 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 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 2012SQL Server 2012

SQL Server 2012 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.SQL Server 2012 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 di inserimento, eliminazione e aggiornamento: 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

Guida agli indici columnstoreColumnstore Indexes Guide
Caricamento dati di indici columnstoreColumnstore Indexes Data Loading
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 warehousingColumnstore Indexes for Data Warehousing
Deframmentazione degli indici columnstoreColumnstore Indexes Defragmentation