Partilhar via


sys.column_store_segments (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Devolve uma linha para cada segmento de coluna num índice columnstore. Existe um segmento de coluna por coluna por grupo de linhas. Por exemplo, um índice columnstore com 10 grupos de linhas e 34 colunas tem 340 linhas nesta vista.

Nome da coluna Tipo de dados Description
partition_id bigint Indica o ID da partição. É exclusivo dentro de um banco de dados.
hobt_id bigint ID do heap ou índice da árvore B (HoBT) para a tabela que tem este índice de stock.
column_id int ID da coluna columnstore.
segment_id int ID do grupo de linhas. Para compatibilidade retroativa, o nome da coluna continua a ser chamado segment_id mesmo sendo o ID do grupo de linhas. Pode identificar de forma única um segmento usando <hobt_id, partition_id, column_id, segment_id>.
version int Versão do formato de segmento de coluna.
encoding_type int Tipo de codificação usada para esse segmento:

1 = VALUE_BASED - não-string/binário sem dicionário (semelhante ao 4 com algumas variações internas)

2 = VALUE_HASH_BASED - coluna não-string/binária com valores comuns no dicionário

3 = STRING_HASH_BASED - string/coluna binária com valores comuns no dicionário

4 = STORE_BY_VALUE_BASED - não-string/binário sem dicionário

5 = STRING_STORE_BY_VALUE_BASED - string/binário sem dicionário

Para obter mais informações, consulte a seção Observações.
row_count int Número de filas no grupo de filas.
has_nulls int 1 se o segmento da coluna tiver NULLs.
base_id bigint ID de valor base se estiver a ser usado o tipo de codificação 1. Se a codificação tipo 1 não estiver a ser usada, base_id está definida para -1.
magnitude float Magnitude se estiver a ser usada a codificação tipo 1. Se a codificação tipo 1 não estiver a ser usada, magnitude está definida para -1.
primary_dictionary_id int Um valor de 0 representa o dicionário global. Um valor de -1 indica que não existe um dicionário global criado para esta coluna.
secondary_dictionary_id int Um valor não nulo aponta para o dicionário local desta coluna no segmento atual (por exemplo, o grupo de linhas). Um valor de -1 indica que não existe dicionário local para este segmento.
min_data_id bigint Apenas para uso interno.
max_data_id bigint Apenas para uso interno.
null_value bigint Valor usado para representar nulos.
on_disk_size bigint Tamanho do segmento em bytes.
collation_id int A classificação atual quando o segmento foi criado. Corresponde a um ID interno. Apenas para uso interno.

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure
min_deep_data Varbinary(18) Usado para eliminação de segmentos. 1 Para uso interno apenas.

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure
max_deep_data Varbinary(18) Usado para eliminação de segmentos. 1 Para uso interno apenas.

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure

1 Após a atualização para uma versão do Motor de Base de Dados que suporta eliminação min/max de segmentos para um conjunto expandido de tipos de dados (introduzido no SQL Server 2022 (16.x)), os min_deep_data e max_deep_data são NULL até que o índice de coluna seja reconstruído usando uma ALTER INDEX ... REBUILD instrução ou.CREATE INDEX ... WITH (DROP_EXISTING = ON)

Observações

O tipo de codificação de segmento columnstore é selecionado pelo Motor de Base de Dados analisando os dados do segmento com o objetivo de alcançar o menor custo de armazenamento. Se os dados forem maioritariamente distintos, o Motor de Base de Dados utiliza codificação baseada em valores. Se os dados não forem maioritariamente distintos, o Motor de Base de Dados utiliza codificação baseada em hash. A escolha entre codificação baseada em strings e baseada em valores está relacionada com o tipo de dados armazenados, sejam dados string ou binários. Todas as codificações aproveitam o bit-packing e a codificação por comprimento de execução sempre que possível.

A eliminação de segmentos de Column Store aplica-se a tipos de dados numéricos, de data e hora, e ao tipo de dado datetimeoffset com escala menor ou igual a dois. A partir do SQL Server 2022 (16.x), as capacidades de eliminação de segmentos expandem-se para tipos de dados string e binários, o tipo de dado singleidentifier e o tipo de dados datetimeoffset para escalas superiores a dois. A eliminação de segmentos não se aplica a tipos de dados LOB como varchar(max),nvarchar(max) e varbinary(max). Para mais informações, consulte O que há de novo nos índices de columnstore.

Permissions

É necessária a VIEW DEFINITION permissão para a visualização. As colunas seguintes retornam NULL , a menos que o utilizador também tenha a SELECT permissão: has_nulls, base_id, magnitude, min_data_id, max_data_id, e null_value.

A visibilidade dos metadados nas visualizações de catálogo é limitada aos itens de segurança que um utilizador possui ou nos quais o utilizador recebeu alguma permissão. Para obter mais informações, consulte Configuração de visibilidade de metadados.

Examples

A consulta seguinte devolve informações sobre segmentos de um índice de column store.

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;