sys.column_store_segments (Transact-SQL)
S’applique à : SQL Server 2012 (11.x) et azure SQL Managed Instance ultérieure
Retourne une ligne pour chaque segment de colonne dans un index columnstore. Il existe un segment de colonne par colonne par rowgroup. Par exemple, une table avec 10 rowgroups et 34 colonnes retourne 340 lignes.
Nom de la colonne | Type de données | Description |
---|---|---|
partition_id | bigint | Indique l'ID de partition. Unique dans une base de données. |
hobt_id | bigint | ID du tas ou de l’index B-tree (HoBT) pour la table qui a cet index columnstore. |
column_id | int | ID de la colonne columnstore. |
segment_id | int | ID du rowgroup. Pour une compatibilité descendante, le nom de colonne continue d’être appelé segment_id même s’il s’agit de l’ID de rowgroup. Vous pouvez identifier de manière unique un segment à l’aide <de hobt_id, partition_id, column_id, <segment_id>>. |
version | int | Version du format de segment de colonne. |
encoding_type | int | Type d’encodage utilisé pour ce segment : 1 = VALUE_BASED - non-string/binary sans dictionnaire (similaire à 4 avec certaines variantes internes) 2 = VALUE_HASH_BASED - colonne non-string/binaire avec des valeurs courantes dans le dictionnaire 3 = STRING_HASH_BASED - colonne chaîne/binaire avec des valeurs communes dans le dictionnaire 4 = STORE_BY_VALUE_BASED - non-string/binary sans dictionnaire 5 = STRING_STORE_BY_VALUE_BASED - chaîne/binaire sans dictionnaire Pour plus d’informations, consultez la section Remarques. |
row_count | int | Nombre de lignes dans le groupe de lignes. |
has_nulls | int | 1 si le segment de colonne a des valeurs NULL. |
base_id | bigint | ID de valeur de base si le type d’encodage 1 est utilisé. Si le type d’encodage 1 n’est pas utilisé, base_id a la valeur -1. |
magnitude | float | Magnitude si le type d’encodage 1 est utilisé. Si le type d’encodage 1 n’est pas utilisé, la magnitude est définie sur -1. |
primary_dictionary_id | int | La valeur 0 représente le dictionnaire global. La valeur -1 indique qu’il n’existe aucun dictionnaire global créé pour cette colonne. |
secondary_dictionary_id | int | Une valeur non nulle pointe vers le dictionnaire local pour cette colonne dans le segment actuel (par exemple, le rowgroup). La valeur -1 indique qu’il n’existe aucun dictionnaire local pour ce segment. |
min_data_id | bigint | ID de données minimal dans le segment de colonne. |
max_data_id | bigint | ID de données maximal dans le segment de colonne. |
null_value | bigint | Valeur utilisée pour représenter les valeurs NULL. |
on_disk_size | bigint | Taille de segment en octets. |
collation_id | int | S’applique à SQL Server 2022 (16.x) et versions ultérieures. Classement actuel lors de la création du segment. Mappe à un ID interne. Actuellement interne uniquement et non pour le développement. |
min_deep_data | varbinary(18) | S’applique à SQL Server 2022 (16.x) et versions ultérieures. Utilisé pour l’élimination des segments.1 Pour une utilisation interne uniquement. |
max_deep_data | varbinary(18) | S’applique à SQL Server 2022 (16.x) et versions ultérieures. Utilisé pour l’élimination des segments.1 Pour une utilisation interne uniquement. |
1 Après la mise à niveau vers une version de SQL Server qui prend en charge l’élimination de segment min/max de chaîne (SQL Server 2022 (16.x) et ultérieure), min_deep_data
et max_deep_data
sera NULL
jusqu’à ce que l’index columnstore soit reconstruit, à l’aide d’une fonction REBUILD ou DROP/CREATE. Après une reconstruction, les segments qui contiennent des types de données qui peuvent tirer parti de l’élimination de segment min/max de chaîne contiennent des données.
Notes
Le type d’encodage de segment columnstore est sélectionné par l’Moteur de base de données avec l’objectif d’atteindre le coût de stockage le plus bas, en analysant les données de segment. Si les données sont principalement distinctes, la Moteur de base de données utilise l’encodage basé sur des valeurs. Si les données ne sont généralement pas distinctes, la Moteur de base de données utilise l’encodage basé sur le hachage. Le choix entre l’encodage basé sur une chaîne et basé sur des valeurs est lié au type de données stockées, que les données de chaîne ou les données binaires soient stockées. Tous les encodages tirent parti de l’empaquetage de bits et de l’encodage de longueur d’exécution lorsque cela est possible.
L’élimination des segments Columnstore s’applique aux types de données numériques, de date et d’heure et au type de données datetimeoffset avec une échelle inférieure ou égale à deux. À compter de SQL Server 2022 (16.x), les fonctionnalités d’élimination des segments s’étendent aux types de données chaîne, binaire, identificateur unique et datetimeoffset pour une mise à l’échelle supérieure à deux. L’élimination des segments ne s’applique pas aux types de données métier tels que les longueurs de type de données (max).
autorisations
Toutes les colonnes nécessitent au moins VIEW DEFINITION
une autorisation sur la table. Les colonnes suivantes retournentNULL
, sauf si l’utilisateur a SELECT
également l’autorisation : has_nulls
, , base_id
magnitude
, min_data_id
, , max_data_id
et null_value
.
La visibilité des métadonnées dans les affichages catalogue est limitée aux éléments sécurisables qu'un utilisateur détient ou pour lesquels des autorisations lui ont été accordées. Pour plus d'informations, consultez Metadata Visibility Configuration.
Exemples
La requête suivante retourne des informations sur les segments d'un index 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
Étapes suivantes
- Vues de catalogue d'objets (Transact-SQL)
- Affichages catalogue (Transact-SQL)
- Questions fréquentes sur l'interrogation des catalogues système de SQL Server
- sys.columns (Transact-SQL)
- sys.all_columns (Transact-SQL)
- sys.computed_columns (Transact-SQL)
- Description des index columnstore
- sys.column_store_dictionaries (Transact-SQL)