sys.column_store_segments (Transact-SQL)

Si applica a: SQL Server 2012 (11.x) e versioni successive Istanza gestita di SQL di Azure

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

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 contiene 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.
grandezza float Grandezza se viene usato il tipo di codifica 1. Se il tipo di codifica 1 non viene usato, la grandezza è impostata 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 ID dati minimo nel segmento di colonna.
max_data_id bigint ID dati massimo nel segmento di colonna.
null_value bigint Valore utilizzato per rappresentare i valori Null.
on_disk_size bigint Dimensioni del segmento in byte.
collation_id int Si applica a SQL Server 2022 (16.x) e versioni successive.
Regole di confronto correnti al momento della creazione del segmento. Esegue il mapping a un ID interno. Attualmente solo interno e non per lo sviluppo.
min_deep_data varbinary(18) Si applica a SQL Server 2022 (16.x) e versioni successive.
Utilizzato per l'eliminazione dei segmenti.1 Solo per uso interno.
max_deep_data varbinary(18) Si applica a SQL Server 2022 (16.x) e versioni successive.
Utilizzato per l'eliminazione dei segmenti.1 Solo per uso interno.

1 Dopo l'aggiornamento a una versione di SQL Server che supporta l'eliminazione di segmenti min/max di stringa (SQL Server 2022 (16.x) e versioni successive, min_deep_data e max_deep_data sarà NULL fino a quando l'indice columnstore non viene ricompilato, usando un elemento REBUILD o DROP/CREATE. Dopo una ricompilazione, i segmenti che contengono tipi di dati che possono trarre vantaggio dall'eliminazione di segmenti min/max stringa conterranno dati.

Osservazioni:

Il tipo di codifica del segmento columnstore viene selezionato dal motore di database con l'obiettivo di ottenere il costo di archiviazione più basso, analizzando i dati del segmento. 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 estendono ai tipi di dati stringa, binario, guid e al tipo di dati datetimeoffset con scala superiore a due. L'eliminazione dei segmenti non si applica ai tipi di dati LOB, ad esempio le lunghezze dei tipi di dati (max).

Autorizzazioni

Tutte le colonne richiedono almeno VIEW DEFINITION l'autorizzazione per la tabella. Le colonne seguenti restituiscono NULL a meno che l'utente non disponga SELECT anche dell'autorizzazione: has_nulls, base_idmagnitude, min_data_id, max_data_id, e null_value.

La visibilità dei metadati nelle viste del catalogo è limitata alle entità a protezione diretta di cui un utente è proprietario o a cui l'utente ha concesso alcune 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 ;
GO

Passaggi successivi