Condividi tramite


sys.column_store_segments (Transact-SQL)

Si applica a:SQL ServerAzure SQL DatabaseAzure SQL Istanza gestitaDatabase SQL in Microsoft Fabric

Restituisce una riga per ogni segmento di colonna in un indice columnstore. Esiste un segmento di colonna per colonna per ogni rowgroup. Ad esempio, un indice columnstore con 10 rowgroup e 34 colonne ha 340 righe in questa vista.

Nome colonna Tipo di dati Descrizione
partition_id bigint Indica l'ID della partizione. Valore univoco all'interno di un database.
hobt_id bigint ID dell'heap o dell'indice albero B (HoBT) per la tabella con questo indice columnstore.
column_id int ID della colonna columnstore.
segment_id int ID del rowgroup. Per garantire la compatibilità con le versioni precedenti, il nome della colonna continua a essere chiamato segment_id anche se si tratta dell'ID del rowgroup. È possibile identificare in modo univoco un segmento usando <hobt_id, partition_id, column_id, segment_id>.
version int Versione del formato del segmento di colonna.
encoding_type int Tipo di codifica usata per il segmento:

1 = VALUE_BASED - non stringa/binario senza dizionario (simile a 4 con alcune varianti interne)

2 = VALUE_HASH_BASED - colonna non stringa/binaria con valori comuni nel dizionario

3 = STRING_HASH_BASED - colonna stringa/binaria con valori comuni nel dizionario

4 = STORE_BY_VALUE_BASED - non stringa/binaria senza dizionario

5 = STRING_STORE_BY_VALUE_BASED - stringa/binaria senza dizionario

Per altre informazioni, vedere la sezione Osservazioni.
row_count int Numero di righe nel gruppo di righe.
has_nulls int 1 se il segmento di colonna ha valori NULL.
base_id bigint ID valore di base se viene usato il tipo di codifica 1. Se il tipo di codifica 1 non viene usato, base_id è impostato su -1.
magnitude float Grandezza se viene usato il tipo di codifica 1. Se il tipo di codifica 1 non viene usato, magnitude è impostato su -1.
primary_dictionary_id int Il valore 0 rappresenta il dizionario globale. Il valore -1 indica che per questa colonna non è stato creato alcun dizionario globale.
secondary_dictionary_id int Un valore diverso da zero punta al dizionario locale per questa colonna nel segmento corrente, ad esempio il rowgroup. Il valore -1 indica che non esiste un dizionario locale per questo segmento.
min_data_id bigint Solo per uso interno.
max_data_id bigint Solo per uso interno.
null_value bigint Valore utilizzato per rappresentare i valori Null.
on_disk_size bigint Dimensioni del segmento in byte.
collation_id int Regole di confronto correnti al momento della creazione del segmento. Esegue il mapping a un ID interno. Solo per uso interno.

si applica a: SQL Server 2022 (16.x) e versioni successive, database SQL di Azure e Istanza gestita di SQL di Azure
min_deep_data varbinary(18) Utilizzato per l'eliminazione dei segmenti.1 Solo per uso interno.

si applica a: SQL Server 2022 (16.x) e versioni successive, database SQL di Azure e Istanza gestita di SQL di Azure
max_deep_data varbinary(18) Utilizzato per l'eliminazione dei segmenti.1 Solo per uso interno.

si applica a: SQL Server 2022 (16.x) e versioni successive, database SQL di Azure e Istanza gestita di SQL di Azure

1 Dopo l'aggiornamento a una versione del motore di database che supporta l'eliminazione di segmenti min/max per un set espanso di tipi di dati (introdotto in SQL Server 2022 (16.x), e min_deep_datamax_deep_data sono NULL fino a quando l'indice columnstore non viene ricompilato usando un'istruzione ALTER INDEX ... REBUILD o CREATE INDEX ... WITH (DROP_EXISTING = ON) .

Osservazioni:

Il tipo di codifica del segmento columnstore viene selezionato dal motore di database analizzando i dati del segmento con l'obiettivo di ottenere il costo di archiviazione più basso. Se i dati sono principalmente distinti, il motore di database usa la codifica basata su valori. Se i dati non sono per lo più distinti, il motore di database usa la codifica basata su hash. La scelta tra codifica basata su stringa e basata su valori è correlata al tipo di dati archiviati, sia dati stringa che dati binari. Tutte le codifiche sfruttano la codifica bit-packaging e run-length, quando possibile.

L'eliminazione dei segmenti columnstore si applica ai tipi di dati numerici, di data e ora e al tipo di dati datetimeoffset con scala minore o uguale a due. A partire da SQL Server 2022 (16.x), le funzionalità di eliminazione dei segmenti si espandono ai tipi di dati stringa e binari, al tipo di dati uniqueidentifier e al tipo di dati datetimeoffset per la scala maggiore di due. L'eliminazione dei segmenti non si applica ai tipi di dati LOB, ad esempio varchar(max), nvarchar(max)e varbinary(max). Per altre informazioni, vedere Novità negli indici columnstore.

Autorizzazioni

È necessaria l'autorizzazione VIEW DEFINITION per la visualizzazione. Le colonne seguenti restituiscono NULL a meno che l'utente non disponga anche dell'autorizzazioneSELECT: has_nulls, base_id, magnitudemin_data_id, max_data_id, e null_value.

La visibilità dei metadati nelle viste del catalogo è limitata alle entità a protezione diretta di cui l'utente è proprietario o per le quali dispone di autorizzazioni. Per altre informazioni, vedere Metadata Visibility Configuration.

Esempi

Nella query seguente vengono restituite le informazioni sui segmenti di un indice columnstore.

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;