Share via


sys.column_store_segments (Transact-SQL)

Van toepassing op: SQL Server 2012 (11.x) en latere versies Azure SQL Managed Instance

Geeft één rij terug voor elk kolomsegment in een columnstore-index. Er is één kolomsegment per kolom per rijgroep. Een tabel met 10 rijgroepen en 34 kolommen levert bijvoorbeeld 340 rijen op.

Kolomnaam Gegevenstype Description
partition_id bigint Geeft de partitie-ID aan. Is uniek in een database.
hobt_id bigint ID van de heap- of B-boomindex (HoBT) voor de tabel die deze kolomopslagindex bevat.
column_id int Id van de columnstore-kolom.
segment_id int Id van de rijgroep. Voor achterwaartse compatibiliteit blijft de kolomnaam segment_id genoemd, ook al is dit de rijgroep-ID. Je kunt een segment uniek identificeren met <hobt_id, partition_id, column_id>, <segment_id>.
version int Versie van het kolomsegmentformaat.
encoding_type int Type codering die voor dat segment wordt gebruikt:

1 = VALUE_BASED - niet-string/binair zonder woordenboek (vergelijkbaar met 4 met enkele interne variaties)

2 = VALUE_HASH_BASED - niet-string/binaire kolom met gemeenschappelijke waarden in het woordenboek

3 = STRING_HASH_BASED - string/binaire kolom met gemeenschappelijke waarden in woordenboek

4 = STORE_BY_VALUE_BASED - niet-string/binair zonder woordenboek

5 = STRING_STORE_BY_VALUE_BASED - string/binair zonder woordenboek

Zie de sectie Opmerkingen voor meer informatie.
row_count int Aantal rijen in de rijgroep.
has_nulls int 1 als het kolomsegment nullwaarden heeft.
base_id bigint Basiswaarde-ID als coderingstype 1 wordt gebruikt. Als codering type 1 niet wordt gebruikt, wordt base_id ingesteld op -1.
grootte float Grootte als codering type 1 wordt gebruikt. Als codering type 1 niet wordt gebruikt, wordt de grootte ingesteld op -1.
primary_dictionary_id int Een waarde van 0 vertegenwoordigt het globale woordenboek. Een waarde van -1 geeft aan dat er geen globaal woordenboek voor deze kolom is aangemaakt.
secondary_dictionary_id int Een niet-nul waarde wijst naar het lokale woordenboek voor deze kolom in het huidige segment (bijvoorbeeld de rijgroep). Een waarde van -1 geeft aan dat er voor dit segment geen lokaal woordenboek is.
min_data_id bigint Minimale data-ID in het kolomsegment.
max_data_id bigint Maximale data-ID in het kolomsegment.
null_value bigint Waarde die wordt gebruikt om nullen weer te geven.
on_disk_size bigint Grootte van het segment in bytes.
collation_id int Van toepassing op SQL Server 2022 (16.x) en later.
Huidige verzameling toen het segment werd aangemaakt. Kaarten naar een interne ID. Momenteel alleen intern en niet voor ontwikkeling.
min_deep_data varbinair(18) Van toepassing op SQL Server 2022 (16.x) en later.
Gebruikt voor segmenteliminatie. 1 Alleen voor intern gebruik.
max_deep_data varbinair(18) Van toepassing op SQL Server 2022 (16.x) en later.
Gebruikt voor segmenteliminatie. 1 Alleen voor intern gebruik.

1 Na een upgrade naar een versie van SQL Server die string min/max segmenteliminatie ondersteunt (SQL Server 2022 (16.x) en later), min_deep_data en max_deep_data dat blijft zo NULL tot na de herbouw van de columnstore-index, met een REBUILD of DROP/CREATE. Na een rebuild zullen de segmenten die datatypes bevatten die baat kunnen hebben bij string-min/max-segmenteliminatie data bevatten.

Opmerkingen

Het columnstore-segmentcoderingstype wordt door de Database Engine geselecteerd met als doel de laagste opslagkosten te behalen door de segmentgegevens te analyseren. Als data grotendeels verschillend is, gebruikt de Database Engine waardegebaseerde codering. Als data meestal niet onderscheidend is, gebruikt de Database Engine hash-gebaseerde codering. De keuze tussen string-gebaseerde en waardegebaseerde codering hangt samen met het type data dat wordt opgeslagen, of het nu stringdata of binaire data is. Alle coderingen maken waar mogelijk gebruik van bitpacking en run-length codering.

Columnstore-segmenteliminatie geldt voor numerieke, datum- en tijddatatypes, en het datetimeoffset-datatype met schaal kleiner dan of gelijk aan twee. Vanaf SQL Server 2022 (16.x) kunnen segmentuitschakelingsmogelijkheden worden uitgebreid naar tekenreeksen, binaire, GUID-gegevenstypen en het gegevenstype datetimeoffset voor schaal groter dan twee. Segmenteliminatie is niet van toepassing op LOB-datatypes zoals de (maximale) datatypelengtes.

Permissions

Alle kolommen vereisen minimaal VIEW DEFINITION toestemming in de tabel. De volgende kolommen geven terug, NULL tenzij de gebruiker ook toestemming heeft SELECT : has_nulls, base_id, magnitude, , min_data_id, max_data_iden null_value.

De zichtbaarheid van de metagegevens in catalogusweergaven is beperkt tot beveiligbare items waarvan een gebruiker eigenaar is of waarvoor de gebruiker een bepaalde machtiging heeft gekregen. Zie Zichtbaarheidsconfiguratie voor metagegevensvoor meer informatie.

Voorbeelden

De volgende query geeft informatie terug over segmenten van een columnstore-index.

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

Volgende stappen