sys.column_store_segments (Transact-SQL)
Gilt für: SQL Server 2012 (11.x) und höher Azure SQL verwaltete Instanz
Gibt eine Zeile für jedes Spaltensegment in einem Columnstore-Index zurück. Es gibt ein Spaltensegment pro Spalte pro Zeilengruppe. Beispielsweise gibt eine Tabelle mit 10 Zeilengruppen und 34 Spalten 340 Zeilen zurück.
Spaltenname | Datentyp | BESCHREIBUNG |
---|---|---|
partition_id | bigint | Gibt die Partitions-ID an. Ist innerhalb einer Datenbank eindeutig. |
hobt_id | bigint | ID des Heap- oder B-Tree-Index (HoBT) für die Tabelle mit diesem Columnstore-Index. |
column_id | int | ID der columnstore-Spalte. |
segment_id | int | ID der Zeilengruppe. Aus Gründen der Abwärtskompatibilität wird der Spaltenname weiterhin segment_id aufgerufen, obwohl dies die Zeilengruppen-ID ist. Sie können ein Segment mithilfe von <hobt_id, partition_id, column_id,>< segment_id> eindeutig identifizieren. |
Version | int | Die Version des Spaltensegmentformats. |
encoding_type | int | Typ der für dieses Segment verwendeten Codierung: 1 = VALUE_BASED - Nicht-Zeichenfolge/Binärdatei ohne Wörterbuch (ähnlich 4 mit einigen internen Variationen) 2 = VALUE_HASH_BASED - Nicht-Zeichenfolge/binäre Spalte mit gemeinsamen Werten im Wörterbuch 3 = STRING_HASH_BASED - Zeichenfolge/binäre Spalte mit gemeinsamen Werten im Wörterbuch 4 = STORE_BY_VALUE_BASED - Nicht-Zeichenfolge/Binärdatei ohne Wörterbuch 5 = STRING_STORE_BY_VALUE_BASED - Zeichenfolge/Binärdatei ohne Wörterbuch Weitere Informationen finden Sie im Abschnitt Hinweise. |
row_count | int | Die Anzahl der Zeilen in der Zeilengruppe. |
has_nulls | int | 1, wenn das Spaltensegment NULL-Werte enthält. |
base_id | bigint | Basiswert-ID, wenn Codierungstyp 1 verwendet wird. Wenn Codierungstyp 1 nicht verwendet wird, wird base_id auf -1 festgelegt. |
Größe | float | Größe, wenn der Codierungstyp 1 verwendet wird. Wenn der Codierungstyp 1 nicht verwendet wird, wird die Größe auf -1 festgelegt. |
primary_dictionary_id | int | Ein Wert von 0 stellt das globale Wörterbuch dar. Ein Wert von -1 gibt an, dass für diese Spalte kein globales Wörterbuch erstellt wurde. |
secondary_dictionary_id | int | Ein Wert ungleich Null verweist auf das lokale Wörterbuch für diese Spalte im aktuellen Segment (z. B. die Zeilengruppe). Der Wert -1 gibt an, dass für dieses Segment kein lokales Wörterbuch vorhanden ist. |
min_data_id | bigint | Mindestdaten-ID im Spaltensegment. |
max_data_id | bigint | Maximale Daten-ID im Spaltensegment. |
null_value | bigint | Ein Wert, der zum Darstellen von NULL-Werten verwendet wird. |
on_disk_size | bigint | Die Größe des Segments in Byte. |
collation_id | int | Gilt für SQL Server 2022 (16.x) und höher. Aktuelle Sortierung beim Erstellen des Segments. Ordnet eine interne ID zu. Derzeit nur intern und nicht für die Entwicklung. |
min_deep_data | varbinary(18) | Gilt für SQL Server 2022 (16.x) und höher. Wird für die Segmentausscheidung verwendet.1 Nur für die interne Verwendung. |
max_deep_data | varbinary(18) | Gilt für SQL Server 2022 (16.x) und höher. Wird für die Segmentausscheidung verwendet.1 Nur für die interne Verwendung. |
1 Nach dem Upgrade auf eine Version von SQL Server, die die Eliminierung von Zeichenfolgen min/max unterstützt (SQL Server 2022 (16.x) und höher), min_deep_data
und max_deep_data
wird bis NULL
nach dem erneuten Aufbau des Spaltenspeicherindexes mithilfe einer NEUERSTELLUNG oder DROP/CREATE erfolgen. Nach einer Neuerstellung enthalten die Segmente, die Datentypen enthalten, die von der Eliminierung von Zeichenfolgen min/max profitieren können, Daten.
Hinweise
Der Spaltenspeichersegmentcodierungstyp wird durch die Datenbank-Engine ausgewählt, mit dem Ziel, die niedrigsten Speicherkosten zu erzielen, indem die Segmentdaten analysiert werden. Wenn Daten hauptsächlich unterschiedlich sind, verwendet die Datenbank-Engine wertbasierte Codierung. Wenn Daten meist nicht eindeutig sind, verwendet die Datenbank-Engine hashbasierte Codierung. Die Wahl zwischen Zeichenfolgenbasierter und wertbasierter Codierung bezieht sich auf den Datentyp, der gespeichert wird, unabhängig davon, ob Zeichenfolgendaten oder Binärdaten. Alle Codierungen nutzen nach Möglichkeit die Bit-Verpackung und Lauflängencodierung.
Die Eliminierung des Spaltenspeichersegments gilt für numerische Datentypen, Datums- und Uhrzeitdatentypen und den Datentyp "datetimeoffset" mit einer Skalierung kleiner oder gleich zwei. 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. Die Segmententfernung gilt nicht für branchenspezifische Datentypen wie z. B. die Länge des Datentyps (max).
Berechtigungen
Für alle Spalten ist mindestens VIEW DEFINITION
eine Berechtigung für die Tabelle erforderlich. Die folgenden Spalten werden zurückgegeben NULL
, es sei denn, der Benutzer verfügt SELECT
auch über die Berechtigung: has_nulls
, base_id
, , magnitude
, , min_data_id
, max_data_id
und null_value
.
Die Sichtbarkeit der Metadaten in Katalogsichten ist auf sicherungsfähige Elemente eingeschränkt, bei denen der Benutzer entweder der Besitzer ist oder für die dem Benutzer eine Berechtigung erteilt wurde. Weitere Informationen finden Sie unter Metadata Visibility Configuration.
Beispiele
Die folgende Abfrage gibt Informationen zu Segmenten eines columnstore-Indexes zurück.
SELECT i.name, p.object_id, p.index_id, i.type_desc,
COUNT(*) AS number_of_segments
FROM sys.column_store_segments AS s
INNER JOIN sys.partitions AS p
ON s.hobt_id = p.hobt_id
INNER JOIN sys.indexes AS i
ON p.object_id = i.object_id
WHERE i.type = 5 OR i.type = 6
GROUP BY i.name, p.object_id, p.index_id, i.type_desc ;
GO