Dela via


sys.column_store_segments (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Returnerar en rad för varje kolumnsegment i ett kolumnlagreindex. Det finns ett kolumnsegment per kolumn per radgrupp. Till exempel har ett columnstore-index med 10 radgrupper och 34 kolumner 340 rader i den här vyn.

Kolumnnamn Datatyp Description
partition_id bigint Indikerar partitions-ID:t. Är unik i en databas.
hobt_id bigint ID för heap- eller B-trädsindexet (HoBT) för tabellen som har detta kolumnlagringsindex.
column_id int ID för kolumnen columnstore.
segment_id int ID för radgruppen. För bakåtkompatibilitet fortsätter kolumnnamnet att kallas segment_id även om detta är radgrupps-ID:t. Du kan unikt identifiera ett segment med hjälp av <hobt_id, partition_id, column_id, segment_id>.
version int Version av kolumnsegmentformatet.
encoding_type int Typ av kodning som används för det segmentet:

1 = VALUE_BASED - icke-sträng/binär utan ordbok (liknande 4 med vissa interna variationer)

2 = VALUE_HASH_BASED - icke-sträng/binär kolumn med gemensamma värden i ordboken

3 = STRING_HASH_BASED - sträng/binär kolumn med gemensamma värden i ordboken

4 = STORE_BY_VALUE_BASED - icke-sträng/binär utan ordbok

5 = STRING_STORE_BY_VALUE_BASED - sträng/binär utan ordbok

Mer information finns i avsnittet Kommentarer.
row_count int Antal rader i radgruppen.
has_nulls int 1 om kolumnsegmentet har NULLs.
base_id bigint Basvärde-ID om kodningstyp 1 används. Om kodningstyp 1 inte används base_id anges till -1.
magnitude float Magnitud om kodningstyp 1 används. Om kodningstyp 1 inte används magnitude anges till -1.
primary_dictionary_id int Värdet 0 representerar den globala ordboken. Värdet -1 indikerar att det inte finns någon global ordbok skapad för denna kolumn.
secondary_dictionary_id int Ett icke-noll värde pekar på den lokala ordboken för denna kolumn i det aktuella segmentet (till exempel radgruppen). Värdet -1 indikerar att det inte finns någon lokal ordbok för detta segment.
min_data_id bigint Endast för internt bruk.
max_data_id bigint Endast för internt bruk.
null_value bigint Värde som används för att representera nuller.
on_disk_size bigint Segmentets storlek i bytes.
collation_id int Aktuell samling när segmentet skapades. Mappar till ett internt ID. Endast för internt bruk.

gäller för: SQL Server 2022 (16.x) och senare versioner, Azure SQL Database och Azure SQL Managed Instance
min_deep_data varbinär(18) Används för segmenteliminering. 1 Endast för internt bruk.

gäller för: SQL Server 2022 (16.x) och senare versioner, Azure SQL Database och Azure SQL Managed Instance
max_deep_data varbinär(18) Används för segmenteliminering. 1 Endast för internt bruk.

gäller för: SQL Server 2022 (16.x) och senare versioner, Azure SQL Database och Azure SQL Managed Instance

1 När du har uppgraderat till en version av databasmotorn som stöder minsta/högsta segmenteliminering för en utökad uppsättning datatyper (introducerades i SQL Server 2022 (16.x)), min_deep_data och max_deep_data är NULL tills kolumnlagringsindexet återskapas med hjälp av en eller CREATE INDEX ... WITH (DROP_EXISTING = ON) -ALTER INDEX ... REBUILDinstruktion.

Anmärkningar

Kolumnlagringssegmentets kodningstyp väljs av databasmotorn genom att segmentdata analyseras med målet att uppnå den lägsta lagringskostnaden. Om data mestadels är åtskilda använder databasmotorn värdebaserad kodning. Om data mestadels inte är åtskilda använder databasmotorn hashbaserad kodning. Valet mellan strängbaserad och värdebaserad kodning är relaterat till vilken typ av data som lagras, vare sig det gäller strängdata eller binär data. Alla kodningar utnyttjar bitpackning och run-length-kodning när det är möjligt.

Eliminering av kolumnlagringssegment gäller för datatyper för numeriska data, datum och tid och datatypen datetimeoffset med skala mindre än eller lika med två. Från och med SQL Server 2022 (16.x) expanderas funktionerna för segmenteliminering till sträng- och binära datatyper, datatypen uniqueidentifier och datatypen datetimeoffset för skalning större än två. Segmenteliminering gäller inte för LOB-datatyper som varchar(max), nvarchar(max)och varbinary(max). Mer information finns i Nyheter i kolumnlagringsindex.

Permissions

Behörigheten VIEW DEFINITION för vyn krävs. Följande kolumner returneras NULL såvida inte användaren också har behörigheten SELECT : has_nulls, base_id, magnitude, min_data_id, max_data_idoch null_value.

Synligheten för metadata i katalogvyer är begränsad till skyddsbara objekt som en användare antingen äger eller som användaren har beviljats viss behörighet för. För mer information, se inställningar för metadatasynlighet.

Examples

Följande fråga ger information om segment i ett kolumnlagreindex.

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;