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_id
magnitude
, 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 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 ;
GO
Passaggi successivi
- Viste del catalogo oggetti (Transact-SQL)
- Viste del catalogo (Transact-SQL)
- Domande frequenti sull'esecuzione di query nel catalogo di sistema di SQL Server
- sys.columns (Transact-SQL)
- sys.all_columns (Transact-SQL)
- sys.computed_columns (Transact-SQL)
- Guida agli indici columnstore
- sys.column_store_dictionaries (Transact-SQL)