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. Karten zu einer internen ID. 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_idund null_value.

Die Sichtbarkeit der Metadaten in Katalogansichten ist auf sicherungsfähige Elemente beschränkt, die ein Benutzer besitzt oder für die der Benutzer eine Berechtigung erteilt hat. 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

Nächste Schritte