Neuerungen in Columnstore-Indizes
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Datenbank in Microsoft Fabric
Erfahren Sie, welche Columnstore-Features für jede Version von SQL Server und die neuesten Versionen von SQL-Datenbank, Azure Synapse Analytics und Analytics Platform System (PDW) verfügbar sind.
Zusammenfassung der Features einzelner Produktreleases
In dieser Tabelle sind die wichtigsten Funktionen für Columnstore-Indizes sowie die Produkte zusammengefasst, in denen sie verfügbar sind.
Feature für Columnstore-Indizes | SQL Server 2012 (11.x) | SQL Server 2014 (12.x) | SQL Server 2016 (13.x)1 | SQL Server 2017 (14.x) | SQL Server 2019 (15.x) | SQL Server 2022 (16.x) | Azure SQL-Datenbank2 und Azure SQL Managed InstanceAUTD | Dedizierter SQL-Pool in Azure Synapse Analytics |
---|---|---|---|---|---|---|---|---|
Ausführung im Batch-Modus für Multithreaded-Abfragen3 | ja | ja | ja | ja | ja | ja | ja | ja |
Batchmodusausführung für Singlethread-Abfragen | ja | ja | ja | ja | ja | ja | ||
Archivkomprimierungsoption | ja | ja | ja | ja | ja | ja | ja | |
Momentaufnahmeisolation und Read Committed-Momentaufnahmeisolation | ja | ja | ja | ja | ja | ja | ||
Geben Sie den Columnstore-Index bei der Erstellung einer Tabelle an. | ja | ja | ja | ja | ja | ja | ||
Always On unterstützt Columnstore-Indizes. | ja | ja | ja | ja | ja | ja | ja | ja |
Lesbare sekundäre Always On-Replikate unterstützen schreibgeschützte nicht gruppierte Columnstore-Indizes. | ja | ja | ja | ja | ja | ja | ja | ja |
Lesbare sekundäre Always On-Replikate unterstützen aktualisierbare Columnstore-Indizes. | ja | ja | ja | ja | ||||
Schreibgeschützter nicht gruppierter Columnstore-Index in Heap- oder B-Struktur | ja | ja | Ja 4 | Ja 4 | Ja 4 | Ja 4 | Ja 4 | Ja 4 |
Aktualisierbarer nicht gruppierter Columnstore-Index in Heap- oder B-Struktur | ja | ja | ja | ja | ja | ja | ||
Zusätzliche B-Strukturindizes sind für eine Heap- oder B-Struktur mit einem nicht gruppierten Columnstore-Index zulässig. | ja | ja | ja | ja | ja | ja | ja | ja |
Aktualisierbarer gruppierter Columnstore-Index | ja | ja | ja | ja | ja | ja | ja | |
B-Strukturindex in einem gruppierten Columnstore-Index | ja | ja | ja | ja | ja | ja | ||
Columnstore-Index für eine speicheroptimierte Tabelle | ja | ja | ja | ja | ja | ja | ||
Die Definition von nicht gruppierten Columnstore-Indizes unterstützt gefilterte Bedingungen. | ja | ja | ja | ja | ja | ja | ||
Option für die Komprimierungsverzögerung von Columnstore-Indizes in CREATE TABLE und ALTER TABLE |
ja | ja | ja | ja | ja | ja | ||
Unterstützung für nvarchar(max)-Typ | ja | ja | ja | ja | Nr. 5 | |||
Der Columnstore-Index kann über eine nicht persistierte berechnete Spalte verfügen. | ja | ja | ja | |||||
Unterstützung des Tupelverschiebungsvorgangs durch Zusammenführung im Hintergrund | ja | ja | ja | ja | ||||
Sortierte gruppierte Columnstore-Indizes | ja | ja | ja | |||||
Sortierte nicht gruppierte Columnstore-Indizes | ja | |||||||
Online-Columnstore-Index erstellen und neu erstellen | ja | ja | ||||||
Sortierten Online-Columnstore-Index erstellen und neu erstellen | ja |
1 Für SQL Server 2016 (13.x) SP1 und höher sind Spaltenspeicherindizes in allen Editionen verfügbar. Für SQL Server 2016 (13.x) (vor SP1) und früheren Versionen sind Spaltenspeicherindizes nur in der Enterprise Edition verfügbar.
2 Für Die Azure SQL-Datenbank sind Columnstore-Indizes in den DTU Premium-Ebenen, DTU-Standardebenen – S3 und höher und allen vCore-Ebenen verfügbar.
3 Der Grad der Parallelität (DOP) für den Batchmodus ist auf 2 für die SQL Server Standard Edition und auf 1 für die SQL Server Web- und Express-Editionen beschränkt. Diese Einschränkung gilt für Columnstore-Indizes, die über datenträgerbasierte Tabellen und speicheroptimierte Tabellen erstellt wurden.
4 Um einen schreibgeschützten nicht gruppierten Spaltenspeicherindex zu erstellen, speichern Sie den Index in einer schreibgeschützten Dateigruppe.
5 Wird in dedizierten SQL-Pools nicht unterstützt, wird aber im serverlosen SQL-Pool unterstützt.
AUTD- Gilt für Azure SQL Managed Instance-Instanzen, die mit der Updaterichtlinie konfiguriert sind, die sicherstellt, dass die Instanzen immer auf dem neuesten Stand sind.
SQL Server 2022 (16.x)
SQL Server 2022 (16.x) hat die folgenden Features hinzugefügt:
- Sortierte gruppierte Columnstore-Indizes verbessern die Leistung für Abfragen basierend auf sortierten Spalten-Prädikaten. Sortierte Spaltenspeicherindizes können die Leistung verbessern, indem Segmente von Daten vollständig übersprungen werden. Dies kann den IO-Bedarf für Abfragen von Columnstore-Daten drastisch reduzieren. Weitere Informationen finden Sie unter Ein Segment entfernen. Weitere Informationen finden Sie unter CREATE COLUMNSTORE INDEX und Leistungsoptimierung mit sortierten Columnstore-Indizes.
- Prädikatpushdown mit gruppierter Columnstore-Rowgroup-Eliminierung von Zeichenfolgen verwendet Grenzwerte, um Zeichenfolgensuchen zu optimieren. Alle Columnstore-Indizes profitieren von einer verbesserten Segmentlöschung nach Datentyp. Ab SQL Server 2022 (16.x) erweitern sich diese Segmentlöschfunktionalitäten auf Zeichenfolgen-, Binär- und GUID-Datentypen sowie den datetimeoffset-Datentyp für Skalierungen größer als zwei. Zuvor wurde die Eliminierung des Spaltenspeichersegments nur auf numerische Datentypen, Datums- und Zeitdatentypen und den datetimeoffset Datentyp mit einer Genauigkeit kleiner oder gleich zwei angewendet. Nach dem Upgrade auf eine Version von SQL Server, die die Eliminierung von Min/Max-Segmenten bei Zeichenfolgen unterstützt (SQL Server 2022 (16.x) und höher), profitiert der Spaltenspeicherindex nicht von diesem Feature, bis er mit
ALTER INDEX REBUILD
oderCREATE INDEX WITH (DROP_EXISTING = ON)
neu erstellt wird. - Beseitigung von Columnstore-Zeilengruppen für den Präfix von
LIKE
-Prädikaten, zum Beispielcolumn LIKE 'string%'
. Die Segmenteliminierung wird für die Verwendung vonLIKE
ohne Präfix wie z. B.column LIKE '%string'
nicht unterstützt. - Weitere Informationen zu hinzugefügten Features finden Sie unter Neuigkeiten in SQL Server 2022.
SQL Server 2019 (15.x)
SQL Server 2019 (15.x) fügt die folgenden neuen Features hinzu:
Funktionen
Ab SQL Server 2019 (15.x) wird der Tupelverschiebungsvorgang von einem Mergetask im Hintergrund unterstützt, der automatisch kleinere OPEN-Deltazeilengruppen komprimiert, die für einen bestimmten Zeitraum vorhanden waren (wie durch einen internen Schwellenwert festgelegt), oder COMPRESSED-Zeilengruppen zusammenführt, aus denen eine große Anzahl von Zeilen gelöscht wurde. Zuvor war ein Vorgang zum Neuorganisieren eines Index erforderlich, um Zeilengruppen mit teilweise gelöschten Daten zusammenzuführen. Dies verbessert die Qualität des Columnstore-Index im Lauf der Zeit.
SQL Server 2017 (14.x)
SQL Server 2017 (14.x) fügt diese neuen Features hinzu.
Funktionen
- SQL Server 2017 (14.x) unterstützt nichtpersistierte berechnete Spalten in gruppierten Columnstore-Indizes. Persistierte berechnete Spalten werden in gruppierten Columnstore-Indizes nicht unterstützt. Sie können keinen nicht gruppierten Columnstore-Index für eine berechnete Spalte erstellen.
SQL Server 2016 (13.x)
SQL Server 2016 (13.x) fügt wichtige Verbesserungen hinzu, um die Leistung und Flexibilität von Columnstore-Indizes zu erhöhen. Dies verbessert die Data Warehouse-Szenarios und ermöglicht operative Echtzeitanalysen.
Funktionen
Eine Rowstore-Tabelle kann über einen aktualisierbaren nicht gruppierten Columnstore-Index verfügen. Bisher war der nicht gruppierte Columnstore-Index schreibgeschützt.
Die Definition des nicht gruppierten Columnstore-Index unterstützt gefilterte Bedingungen. Um die Auswirkung auf die Leistung beim Hinzufügen eines Columnstore-Indexes in eine OLTP-Tabelle zu verringern, verwenden Sie eine gefilterte Bedingung, um einen nicht gruppierten Columnstore-Index anhand der kalten Daten Ihrer Betriebsworkload zu erstellen.
Eine In-Memory-Tabelle kann nur über einen Columnstore-Index verfügen. Sie können ihn bei Erstellung der Tabelle generieren oder später mit ALTER TABLE (Transact-SQL) hinzufügen. Früher konnte nur eine datenträgerbasierte Tabelle über einen Columnstore-Index verfügen.
Ein gruppierter Columnstore-Index kann über eine oder mehrere nicht gruppierte Rowstore-Indizes verfügen. Früher hat der Columnstore-Index keine nicht gruppierten Indizes unterstützt. SQL Server verwaltet die nicht gruppierten Indizes für DML-Vorgänge automatisch.
Unterstützung für Primär- und Fremdschlüssel unter Verwendung eines B-Strukturindexes zum Erzwingen dieser Einschränkungen für einen gruppierten Columnstore-Index
Columnstore-Indizes können über eine Komprimierungsverzögerungsoption verfügen, die die Auswirkungen minimiert, die die Transaktionsarbeitsauslastung auf betriebliche Echtzeitanalysen hat. Diese Option ermöglicht es, häufig geänderte Zeilen zu stabilisieren, bevor sie in den Columnstore komprimiert werden. Weitere Informationen finden Sie unter CREATE COLUMNSTORE INDEX (Transact-SQL) und Erste Schritte mit Columnstore für operative Echtzeitanalyse.
Leistung für Datenbankkompatibilitätsgrad 120 oder 130
Columnstore-Indizes unterstützen die RCSI-Stufe (Read Committed Snapshot Isolation, Read Committed-Momentaufnahmeisolation) sowie die Momentaufnahmeisolation (Snapshot Isolation, SI). Dies ermöglicht transaktionale konsistente Analyseabfragen ohne Sperren.
Columnstore unterstützt Indexdefragmentierung durch Entfernen von gelöschten Zeilen, ohne dass der Index explizit neu erstellt werden muss. Mit der
ALTER INDEX ... REORGANIZE
-Anweisung werden gelöschte Zeilen basierend auf einer intern definierten Richtlinie in Form eines Onlinevorgangs aus dem Columnstore entfernt.Columnstore-Indizes können über Zugriff auf ein lesbares sekundäres Always On-Replikat verfügen. Sie können die Leistung von Betriebsanalysen verbessern, indem Sie die Analyseabfragen in ein sekundäres Always On-Replikat auslagern.
Die Aggregat-Pushdown-Technik berechnet die Aggregatfunktionen
MIN
,MAX
,SUM
,COUNT
undAVG
während der Tabellenscans, wenn der Datentyp höchstens 8 Byte verwendet und es sich nicht um einen String-Datentyp handelt. Der Aggregatpushdown wird mit oder ohneGROUP BY
-Klausel für gruppierte und nicht gruppierte Columnstore-Indizes unterstützt. Bei SQL Server ist diese Erweiterung für die Enterprise Edition vorbehalten.Der Zeichenfolgenprädikatpushdown beschleunigt Abfragen, bei denen Zeichenfolgen der Typen VARCHAR/CHAR oder NVARCHAR/NCHAR verglichen werden. Dies gilt für die allgemeinen Vergleichsoperatoren und schließt Operatoren wie
LIKE
ein, die Bitmapfilter verwenden. Dies funktioniert mit allen unterstützten Sortierungen. Bei SQL Server ist diese Erweiterung für die Enterprise Edition vorbehalten.Erweiterungen für Batchmodusvorgänge durch Nutzung vektorbasierter Hardwarefunktionen. Der Datenbank-Engine erkennt die CPU-Unterstützung für AVX 2- (Erweiterte Vektorerweiterungen) und SSE 4-Hardwareerweiterungen (Streaming SIMD Extensions 4) und nutzt diese, wenn sie unterstützt werden. Bei SQL Server ist diese Erweiterung für die Enterprise Edition vorbehalten.
Leistung für Datenbankkompatibilitätsgrad 130
Unterstützung der neuen Batchmodusausführung für Abfragen, die diese Vorgänge verwenden:
SORT
- Aggregate mit mehrere verschiedenen Funktionen. Beispiele:
COUNT/COUNT
,AVG/SUM
,CHECKSUM_AGG
undSTDEV/STDEVP
- Fensteraggregatfunktionen:
COUNT
,COUNT_BIG
,SUM
,AVG
,MIN
,MAX
undCLR
- Benutzerdefinierte Fensteraggregate:
CHECKSUM_AGG
,STDEV
,STDEVP
,VAR
,VARP
undGROUPING
- Analysefunktionen für Fensteraggregate:
LAG
,LEAD
,FIRST_VALUE
,LAST_VALUE
,PERCENTILE_CONT
,PERCENTILE_DISC
,CUME_DIST
undPERCENT_RANK
Singlethread-Abfragen, die unter
MAXDOP 1
oder mit einem seriellen Abfrageplan ausgeführt werden, laufen im Batchmodus. Früher konnten nur Multithread-Abfragen im Batchmodus ausgeführt werden.Speicheroptimierte Tabellenabfragen können sowohl beim Zugriff auf Daten im Rowstore- als auch beim Zugriff auf Daten im Columnstore-Index parallele Pläne im SQL InterOp-Modus verwenden.
Unterstützbarkeit
Diese Systemsichten sind für Columnstore neu:
Diese In-Memory-OLTP-basierten DMVs enthalten Updates für den Columnstore:
Begrenzungen
- Für In-Memory-Tabellen muss ein Columnstore-Index alle Spalten enthalten. Der Columnstore-Index kann keine gefilterte Bedingung haben.
- Bei In-Memory-Tabellen werden Abfragen für Spaltenspeicherindizes nur im Interoperabilitätsmodus und nicht im systemeigenen Kompilierungsmodus ausgeführt. Parallele Ausführung wird unterstützt.
Bekannte Probleme
Gilt für: SQL Server, Azure SQL Managed Instance
- Derzeit sind LOB-Spalten (varbinary(max), varchar(max) und nvarchar(max)) in komprimierten Spaltenspeichersegmenten von
DBCC SHRINKDATABASE
undDBCC SHRINKFILE
nicht betroffen.
SQL Server 2014 (12.x)
In SQL Server 2014 (12.x) wurde der gruppierten Columnstore-Index als primäres Speicherformat eingeführt. Dieser ermöglichte reguläre Ladevorgänge sowie Aktualisierungs-, Lösch- und Einfügevorgänge.
- Die Tabelle kann einen gruppierten Columnstore-Index als primären Tabellenspeicher verwenden. Für die Tabelle sind keine anderen Indizes zulässig, aber der gruppierte Columnstore-Index ist aktualisierbar, sodass Sie reguläre Ladevorgänge ausführen und Änderungen an einzelnen Zeilen vornehmen können.
- Der nicht gruppierte Columnstore-Index weist weiterhin die gleiche Funktionalität wie in SQL Server 2012 (11.x) auf, ermöglicht jedoch jetzt die Ausführung zusätzlicher Operatoren im Batchmodus. Er ist weiterhin nur durch erneutes Erstellen und mithilfe eines Partitionswechsels aktualisierbar. Der nicht gruppierte Columnstore-Index wird nur in datenträgerbasierten Tabellen und nicht in In-Memory-Tabellen unterstützt.
- Sowohl der gruppierte als auch der nicht gruppierte Columnstore-Index verfügt über eine Archivierungskomprimierungsoption, die die Daten weiter komprimiert. Die Archivierungsoption eignet sich zur Verringerung der Datengröße sowohl im Arbeitsspeicher als auch auf dem Datenträger, verlangsamt jedoch die Leistung der Abfrage. Dies funktioniert gut für Daten, auf die nur selten zugegriffen wird.
- Der gruppierte und der nicht gruppierte Columnstore-Index funktionieren auf sehr ähnliche Weise. Sie verwenden das gleiche Format für spaltenweise Speicherung, dieselbe Abfrageverarbeitungs-Engine und den gleichen Satz von dynamischen Verwaltungssichten. Der Unterschied besteht in den primären bzw. sekundären Indextypen, und darin, dass der nicht gruppierte Columnstore-Index schreibgeschützt ist.
- Diese Operatoren werden für Multithread-Abfragen im Batchmodus ausgeführt: SCAN, FILTER, PROJECT, JOIN, GROUP BY und UNION ALL.
SQL Server 2012 (11.x)
In SQL Server 2012 (11.x) wurden der nicht gruppierte Columnstore-Index als weiterer Indextyp für Rowstore-Tabellen sowie die Batchverarbeitung für Abfragen für Columnstore-Daten eingeführt.
- Eine Rowstore-Tabelle kann über einen nicht gruppierten Columnstore-Index verfügen.
- Der Columnstore-Index ist schreibgeschützt. Nachdem Sie den Columnstore-Index erstellt haben, können Sie die Tabelle nicht mehr mit
INSERT
-,DELETE
- undUPDATE
-Vorgängen aktualisieren. Um diese Vorgänge auszuführen, müssen Sie den Index löschen,die Tabelle aktualisieren und den Columnstore-Index neu erstellen. Sie können zusätzliche Daten mithilfe von Partitionswechseln in die Tabelle laden. Der Vorteil der Partitionswechsel besteht darin, dass Sie Daten laden können, ohne den Columnstore-Index löschen und neu erstellen zu müssen. - Der Columnstore-Index erfordert stets zusätzlichen Speicherplatz (in der Regel zusätzliche 10 % gegenüber Rowstore), da eine Kopie der Daten gespeichert wird.
- Die Batchverarbeitung bietet eine mindestens doppelt so gute Leistung, ist aber nur für die parallele Abfrageausführung verfügbar.
Zugehöriger Inhalt
- Leitfaden zum Entwerfen von Columnstore-Indizes
- Columnstore-Indizes: Leitfaden zum Datenladevorgang
- Columnstore-Indizes: Abfrageleistung
- Erste Schritte mit Columnstore für die operative Echtzeitanalyse
- Columnstore-Indizes in Data Warehouse
- Optimierung der Indexwartung zur Verbesserung der Abfrageleistung und zur Reduzierung des Ressourcenverbrauchs