sys.column_store_segments (Transact-SQL)
Se aplica a: SQL Server 2012 (11.x) y versiones posteriores de Azure SQL Instancia administrada
Devuelve una fila para cada segmento de columna en un índice de almacén de columnas. Hay un segmento de columna por columna por grupo de filas. Por ejemplo, una tabla con 10 grupos de filas y 34 columnas devuelve 340 filas.
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
partition_id | bigint | Indica el identificador de partición. Es único en una base de datos. |
hobt_id | bigint | Identificador del montón o índice de árbol B (HoBT) de la tabla que tiene este índice de almacén de columnas. |
column_id | int | Identificador de la columna de almacén de columnas. |
segment_id | int | Identificador del grupo de filas. Por motivos de compatibilidad con versiones anteriores, se sigue llamando al nombre de columna segment_id aunque se trata del identificador del grupo de filas. Puede identificar de forma única un segmento mediante <hobt_id, partition_id, column_id>, <segment_id>. |
version | int | Versión del formato de segmento de columna. |
encoding_type | int | Tipo de codificación que se usa para ese segmento: 1 = VALUE_BASED: no string/binary sin diccionario (similar a 4 con algunas variaciones internas) 2 = VALUE_HASH_BASED: columna no string/binaria con valores comunes en el diccionario 3 = STRING_HASH_BASED: cadena/columna binaria con valores comunes en el diccionario 4 = STORE_BY_VALUE_BASED: no string/binary sin diccionario 5 = STRING_STORE_BY_VALUE_BASED: cadena/binario sin diccionario Para obtener más información, vea la sección Notas. |
row_count | int | Número de filas del grupo de filas. |
has_nulls | int | 1 si el segmento de la columna tiene valores NULL. |
base_id | bigint | Id. de valor base si se usa el tipo de codificación 1. Si no se usa el tipo de codificación 1, base_id se establece en -1. |
magnitud | float | Magnitud si se usa el tipo de codificación 1. Si no se usa el tipo de codificación 1, la magnitud se establece en -1. |
primary_dictionary_id | int | Un valor de 0 representa el diccionario global. Un valor de -1 indica que no hay ningún diccionario global creado para esta columna. |
secondary_dictionary_id | int | Un valor distinto de cero apunta al diccionario local de esta columna en el segmento actual (por ejemplo, el grupo de filas). Un valor de -1 indica que no hay ningún diccionario local para este segmento. |
min_data_id | bigint | Identificador de datos mínimo en el segmento de columna. |
max_data_id | bigint | Identificador máximo de datos en el segmento de columna. |
null_value | bigint | Valor usado para representar valores NULL. |
on_disk_size | bigint | Tamaño del segmento en bytes. |
collation_id | int | Se aplica a SQL Server 2022 (16.x) y versiones posteriores. Intercalación actual cuando se creó el segmento. Se asigna a un identificador interno. Actualmente solo es interno y no para el desarrollo. |
min_deep_data | varbinary(18) | Se aplica a SQL Server 2022 (16.x) y versiones posteriores. Se usa para la eliminación de segmentos.1 Solo para uso interno. |
max_deep_data | varbinary(18) | Se aplica a SQL Server 2022 (16.x) y versiones posteriores. Se usa para la eliminación de segmentos.1 Solo para uso interno. |
1 Después de actualizar a una versión de SQL Server que admita la eliminación de segmentos mínimos y máximos de cadena (SQL Server 2022 (16.x) y posteriores), min_deep_data
y max_deep_data
estará NULL
hasta después de que se vuelva a generar el índice de almacén de columnas, mediante rebuild o DROP/CREATE. Después de una recompilación, los segmentos que contienen tipos de datos que pueden beneficiarse de la eliminación de segmentos mínimo/máximo de cadena contendrán datos.
Comentarios
El Motor de base de datos selecciona el tipo de codificación del segmento de almacén de columnas con el objetivo de lograr el menor costo de almacenamiento mediante el análisis de los datos del segmento. Si los datos son principalmente distintos, el Motor de base de datos usa la codificación basada en valores. Si los datos no son principalmente distintos, el Motor de base de datos usa la codificación basada en hash. La elección entre la codificación basada en cadenas y la codificación basada en valores está relacionada con el tipo de datos que se almacenan, ya sean datos de cadena o datos binarios. Todas las codificaciones aprovechan el empaquetado de bits y la codificación de longitud de ejecución siempre que sea posible.
La eliminación de segmentos de almacén de columnas se aplica a los tipos de datos numéricos, de fecha y hora, y al tipo de datos datetimeoffset con escala menor o igual que dos. A partir de SQL Server 2022 (16.x), las funcionalidades de eliminación de segmentos se extienden a los tipos de datos string, binary, guid y al tipo de datos datetimeoffset para la escala superior a dos. La eliminación de segmentos no se aplica a los tipos de datos LOB, como las longitudes de tipo de datos (max).
Permisos
Todas las columnas requieren al menos VIEW DEFINITION
permiso en la tabla. Las columnas siguientes devuelven NULL
a menos que el usuario también tenga SELECT
permiso: has_nulls
, base_id
, magnitude
, min_data_id
, max_data_id
y null_value
.
La visibilidad de los metadatos en las vistas de catálogo se limita a los elementos protegibles y que son propiedad de un usuario o sobre los que el usuario ha recibido algún permiso. Para obtener más información, consulte Metadata Visibility Configuration.
Ejemplos
La consulta siguiente devuelve información acerca de los segmentos de un índice de almacén de columnas.
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
Pasos siguientes
- Vistas de catálogo de objetos (Transact-SQL)
- Vistas de catálogo (Transact-SQL)
- Consultar las preguntas más frecuentes (P+F) del catálogo del sistema de SQL Server
- sys.columns (Transact-SQL)
- sys.all_columns (Transact-SQL)
- sys.computed_columns (Transact-SQL)
- Descripción de los índices de almacén de columnas
- sys.column_store_dictionaries (Transact-SQL)