Neuerungen in Columnstore-Indizes

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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.

Columnstore-Index-Funktion 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) SQL-Datenbank1 Dedizierter SQL-Pool in Azure Synapse Analytics
Batchmodusausführung für Multithread-Abfragen 2 ja Ja Ja Ja Ja Ja Ja ja
Batchmodusausführung für Singlethread-Abfragen ja Ja Ja Ja Ja ja
Option für die Archivierungskomprimierung ja Ja Ja Ja Ja Ja ja
Momentaufnahmeisolation und Read Commited-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-Datenbanken unterstützen schreibgeschützte nicht gruppierte Columnstore-Indizes. ja Ja Ja Ja Ja Ja Ja ja
Lesbare sekundäre Always On-Datenbanken unterstützen aktualisierbare Columnstore-Indizes. ja Ja Ja ja
Schreibgeschützter nicht gruppierter Columnstore-Index auf Heap- oder B-Struktur ja ja Ja3 Ja3 Ja3 Ja3 Ja3 Ja3
Aktualisierbarer nicht gruppierter Columnstore-Index auf 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 Nein 4
Der Columnstore-Index kann über eine nicht permanent berechnete Spalte verfügen. ja Ja ja
Unterstützung des Tupelverschiebungsvorgangs durch Zusammenführungstask im Hintergrund ja Ja Ja ja
Sortierte gruppierte Columnstore-Indizes ja Ja ja

1 Für SQL-Datenbank sind Columnstore-Indizes in den Tarifen Azure SQL-Datenbank DTU Premium und DTU Standard (S3 und höher) sowie in allen vCore-Tarifen verfügbar. Für SQL Server 2016 (13.x) SP1 und höhere Versionen sind Columnstore-Indizes in allen Editionen verfügbar. Für SQL Server 2016 (13.x) (vor SP1) und frühere Versionen sind Columnstore-Indizes nur in der Enterprise Edition verfügbar.

2 Der Grad an Parallelität (DOP) für Vorgänge im Batchmodus sind für SQL Server Standard Edition auf 2 und für SQL Server Web und Express Edition auf 1 beschränkt. Diese Einschränkung gilt für Columnstore-Indizes, die über datenträgerbasierte Tabellen und speicheroptimierte Tabellen erstellt wurden.

3 Speichern Sie den Index in einer schreibgeschützten Dateigruppe, um einen schreibgeschützten nicht gruppierten Columnstore-Index zu erstellen.

4 Wird in dedizierten SQL-Pools nicht unterstützt, wird aber im serverlosen SQL-Pool unterstützt.

SQL Server 2022 (16.x)

SQL Server 2022 (16.x) fügt diese neuen Features hinzu. Weitere Informationen finden Sie unter Neues in SQL Server 2022 (16.x).

  • 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. Gruppierte Columnstore-Indizes sind in SQL Server 2022 (16.x) verfügbar. Weitere Informationen finden Sie unter CREATE COLUMNSTORE INDEX und Leistungsoptimierung mit sortiertem, geclustertem Columnstore-Index.

  • Prädikat-Pushdown mit gruppierter Columnstore-Zeilengruppierungs-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) werden die Funktionen zur Segmentlöschung auf Zeichenfolgen, binäre, guid-Datentypen und den Datentyp datetimeoffset für die Skalierung größer als zwei erweitert. Zuvor galt die Columnstore-Segmenteliminierung für numerische, Datums- und Zeitdatentypen sowie für den Datentyp datetimeoffset mit einer Skalierung kleiner oder gleich zwei. Nach dem Upgrade auf eine Version von SQL Server, die die Eliminierung von Zeichenfolgen min/max (SQL Server 2022 (16.x) und höher unterstützt, optimiert der Columnstore-Index dieses Feature erst, wenn es mit NEUERSTELLUNG oder DROP/CREATE neu erstellt wird.

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 von nicht gruppierten Columnstore-Indizes 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. Mit dieser Option können häufig geänderte Zeilen vor der Komprimierung in den Columnstore stabilisiert 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) 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 Aggregatweitergabe berechnet die Aggregatfunktionen MIN, MAX, SUM, COUNT und AVG während Tabellenscans, wenn der Datentyp 8 Byte oder weniger nutzt und es sich nicht um einen String-Datentyp handelt. Die Aggregatweitergabe wird mit oder ohne GROUP BY-Klausel für gruppierte und nicht gruppierte Columnstore-Indizes unterstützt. Bei SQL Server ist diese Erweiterung für die Enterprise Edition vorbehalten.

  • Die Zeichenfolgenprädikatweitergabe 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 können mithilfe vektorbasierter Hardwarefunktionen genutzt werden. 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 und STDEV/STDEVP
    • Fensteraggregatfunktionen: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX und CLR
    • Benutzerdefinierte Fensteraggregate: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARP und GROUPING
    • Analysefunktionen für Fensteraggregate: LAG, LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DIST und PERCENT_RANK
  • Singlethread-Abfragen unter MAXDOP 1 oder mit der seriellen Abfrageplanausführung 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ützungsmöglichkeiten

Diese Systemsichten sind für Columnstore neu:

In-Memory-OLTP-basierte 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.
  • Für In-Memory-Tabellen können Abfragen für Columnstore-Indizes nur im InterOP-Modus und nicht im einheitlichen In-Memory-Modus ausgeführt werden. Parallele Ausführung wird unterstützt.

Bekannte Probleme

Gilt für: Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics (nur dedizierte SQL-Pools)

  • LOB-Spalten (varbinary(max), varchar(max) und nvarchar(max)) in komprimierten Spaltenspeichersegmenten sind aktuell von DBCC SHRINKDATABASE und DBCC 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- und UPDATE-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.