Compartilhar via


DBCC SHOW_STATISTICS (Transact-SQL)

DBCC SHOW_STATISTICS exibe as estatísticas de otimização de consulta atuais de uma tabela ou exibição indexada. O otimizador de consulta usa as estatísticas para calcular a cardinalidade ou o número de linhas no resultado da consulta, o que permite a esse otimizador criar um plano de consulta de alta qualidade. Por exemplo, o otimizador de consulta pode usar estimativas de cardinalidade para escolher o operador de busca do índice, em vez do operador de verificação do índice no plano de consulta, melhorando o desempenho da consulta ao evitar uma verificação de índice que consome muitos recursos.

O otimizador de consulta armazena estatísticas para uma tabela ou exibição indexada em um objeto de estatísticas. Para uma tabela, o objeto de estatísticas é criado em um índice ou uma lista de colunas de tabela. O objeto de estatísticas inclui um cabeçalho com metadados sobre as estatísticas, um histograma com a distribuição de valores na primeira coluna de chave do objeto de estatísticas e um vetor de densidade para medir a correlação entre colunas. O Mecanismo de Banco de Dados pode calcular estimativas de cardinalidade com qualquer dos dados no objeto de estatísticas.

DBCC SHOW_STATISTICS exibe o cabeçalho, o histograma e o vetor de densidade com base nos dados armazenados no objeto de estatísticas. A sintaxe lhe permite especificar uma tabela ou exibição indexada junto com um nome de índice de destino, nome de estatísticas ou nome da coluna. Este tópico descreve como exibir as estatísticas e como entender os resultados apresentados.

Para obter mais informações, consulte Usando estatísticas para melhorar o desempenho de consultas.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target ) 
[ WITH [ NO_INFOMSGS ] < option > [ , n ] ]
< option > :: =
    STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM

Argumentos

  • table_or_indexed_view_name
    O nome da tabela ou exibição indexada das quais exibir informações de estatísticas.

  • target
    O nome do índice, das estatísticas ou da coluna para a qual exibir informações de estatísticas. Se target for um nome de uma estatística ou índice existente em uma tabela ou exibição indexada, as informações de estatísticas sobre esse destino serão retornadas. Se target for o nome de uma coluna existente e houver estatísticas criadas automaticamente nessa coluna, as informações sobre essa estatística criada de forma automática serão retornadas. Se uma estatística criada automaticamente não existir para um destino de coluna, a mensagem de erro 2767 será retornada.

  • NO_INFOMSGS
    Suprime todas as mensagens informativas com níveis de severidade de 0 a 10.

  • STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM [ **,**n ]
    A especificação de um ou mais desses parâmetros limita os conjuntos de resultados retornados pela instrução para a opção ou as opções especificadas. Se nenhuma opção for especificada, todas as informações de estatísticas serão retornadas.

    STATS_STREAM é Identificado apenas para fins informativos. Sem suporte. A compatibilidade futura não está garantida.

Conjuntos de resultados

A tabela a seguir descreve as colunas retornadas no conjunto de resultados quando STAT_HEADER está especificado.

Nome da coluna

Descrição

Nome

O nome do objeto de estatísticas.

Atualizado

Data e hora da última atualização da estatística. A função STATS_DATE é uma forma alternativa de recuperar essas informações.

Linhas

O número total de linhas na tabela ou exibição indexada quando as estatísticas foram atualizadas pela última vez. Se as estatísticas forem filtradas ou corresponderem a um índice filtrado, o número de linhas talvez seja menor do que o número de linhas na tabela. Para obter mais informações, consulteUsando estatísticas para melhorar o desempenho de consultas.

Linhas Amostradas

O número total de linhas de amostra para cálculos de estatísticas. Se Linhas Amostradas < Linhas, o histograma e os resultados de densidade exibidos serão estimativas com base nas linhas amostradas.

Etapas

O número de etapas no histograma. Cada etapa abrange uma gama de valores de colunas seguidos por um valor de coluna associada superior. As etapas do histograma são definidas na primeira coluna de chave nas estatísticas. O número máximo de etapas é 200.

Densidade

Calculada como 1 / valores distintos para todos os valores na primeira coluna de chave do objeto de estatísticas, excluindo os valores de limite do histograma. Esse valor de Densidade não é usado pelo otimizador de consulta e é exibido para fins de compatibilidade com versões anteriores ao SQL Server 2008.

Comprimento Médio de Chave

O número médio de bytes por valor para todas as colunas de chave do objeto de estatísticas.

Índice de Cadeia de Caracteres

Sim indica que o objeto de estatísticas contém estatísticas do resumo da cadeia de caracteres para melhorar a estimativa de cardinalidade para predicados de consulta que usam o operador LIKE; por exemplo, WHERE ProductName LIKE '%Bike'. As estatísticas do resumo da cadeia de caracteres são armazenadas separadamente no histograma e criadas na primeira coluna de chave do objeto de estatísticas quando é do tipo char, varchar, nchar, nvarchar, varchar(max), nvarchar(max), text ou ntext..

Expressão de Filtro

Predicado do subconjunto de linhas de tabela incluído no objeto de estatísticas. NULL = estatísticas não filtradas. Para obter mais informações sobre predicados filtrados, consulte Diretrizes de criação de índice filtrado. Para obter mais informações sobre estatísticas filtradas, consulte Usando estatísticas para melhorar o desempenho de consultas.

Linhas não filtradas

O número total de linhas na tabela antes da aplicação da expressão de filtro. Se o valor da Expressão de Filtro for NULL, as Linhas Não Filtradas serão iguais a Linhas.

A tabela a seguir descreve as colunas retornadas no conjunto de resultados quando DENSITY_VECTOR é especificado.

Nome da coluna

Descrição

Toda Densidade

A densidade é 1 / valores distintos. Os resultados exibem a densidade de cada prefixo de colunas no objeto de estatísticas, uma linha por densidade. Um valor distinto é uma lista distinta dos valores de coluna por linha e por prefixo de colunas. Por exemplo, se o objeto de estatísticas contiver colunas de chave (A, B, C), os resultados reportarão a densidade de listas distintas de valores em cada um desses prefixos de colunas: (A), (A,B) e (A, B, C). Com o uso do prefixo (A, B, C), cada uma dessas listas é uma lista de valores distintos: (3, 5, 6), (4, 4, 6), (4, 5, 6), (4, 5, 7). Com o uso do prefixo (A, B) os mesmos valores de colunas têm estas listas de valores distintos: (3, 5), (4, 4) e (4, 5)

Comprimento Médio

O comprimento médio, em bytes, para armazenar uma lista dos valores das colunas para o prefixo da coluna. Por exemplo, se os valores na lista (3, 5, 6) exigirem cada um 4 bytes, o comprimento será de 12 bytes.

Colunas

Os nomes das colunas no prefixo para o qual as opções Toda densidade e Comprimento médio são exibidas.

A tabela a seguir descreve as colunas retornadas no conjunto de resultados quando a opção HISTOGRAM está especificada.

Nome da coluna

Descrição

RANGE_HI_KEY

Valor da coluna associada superior de uma etapa do histograma. O valor da coluna também será denominado um valor de chave.

RANGE_ROWS

Número estimado de linhas cujo valor de coluna fica dentro de uma etapa do histograma, excluindo-se o limite superior.

EQ_ROWS

Número estimado de linhas cujo valor de coluna é igual ao limite superior da etapa do histograma.

DISTINCT_RANGE_ROWS

Número estimado de linhas com um valor de coluna distinto dentro de uma etapa do histograma, excluindo-se o limite superior.

AVG_RANGE_ROWS

Número médio de linhas com valores de colunas duplicados dentro de uma etapa do histograma, excluindo-se o limite superior (RANGE_ROWS / DISTINCT_RANGE_ROWS para DISTINCT_RANGE_ROWS > 0).

Comentários

Histograma

Um histograma mede a frequência de ocorrência de cada valor distinto em um conjunto de dados. O otimizador de consulta calcula um histograma com base nos valores de coluna na primeira coluna de chave do objeto de estatísticas, selecionando os valores de coluna por amostragem estatística das linhas ou pela execução de uma verificação completa de todas as linhas na tabela ou na exibição. Se o histograma for criado com base em um conjunto amostrado de linhas, os totais armazenados para o número de linhas e o número de valores distintos são estimativas e não precisam ser números inteiros.

Para criar o histograma, o otimizador de consulta classifica os valores de colunas, calcula o número de valores que correspondem a cada valor de coluna distinta e agrega os valores de colunas em um máximo de 200 etapas de histograma contíguas. Cada etapa inclui uma gama de valores de colunas seguidos por um valor de coluna associada superior. O intervalo inclui todos os possíveis valores de coluna entre valores de limite, excluindo-se os próprios valores de limite em si. O mais baixo dos valores de coluna classificados é o valor de limite superior da primeira etapa do histograma.

O seguinte diagrama mostra um histograma com seis etapas: A área à esquerda do primeiro valor de limite superior corresponde à primeira etapa.

Histograma com 6 etapas

Para cada etapa do histograma:

  • A linha em negrito representa o valor de limite superior (RANGE_HI_KEY) e o número de vezes que ele ocorre (EQ_ROWS)

  • A área sólida à esquerda de RANGE_HI_KEY representa o intervalo de valores de coluna e o número médio de vezes em que cada valor de coluna ocorre (AVG_RANGE_ROWS). AVG_RANGE_ROWS para a primeira etapa do histograma é sempre 0.

  • As linhas pontilhadas representam os valores amostrados usados para estimar o número total de valores distintos no intervalo (DISTINCT_RANGE_ROWS) e o número total de valores no intervalo (RANGE_ROWS). O otimizador de consulta usa RANGE_ROWS e DISTINCT_RANGE_ROWS para calcular AVG_RANGE_ROWS e não armazena os valores amostrados.

O otimizador de consulta define as etapas do histograma de acordo com o significado estatístico delas. Ele usa um algoritmo de diferença máxima para minimizar o número de etapas no histograma, enquanto maximiza a diferença entre os valores de limite. O número máximo de etapas é 200. O número de etapas do histograma pode ser menor do que o número de valores distintos, até mesmo para colunas com menos de 200 pontos de limite. Por exemplo, uma coluna com 100 valores distintos pode ter um histograma com menos de 100 pontos de limite.

Vetor de densidade

O otimizador de consulta usa densidades para aprimorar as estimativas de cardinalidade de consultas que retornam várias colunas da mesma tabela ou exibição indexada. O vetor de densidade contém uma densidade para cada prefixo de colunas no objeto de estatísticas. Por exemplo, se o objeto de estatísticas tiver as colunas de chave CustomerId, ItemId e Price, a densidade será calculada com base em cada um dos prefixos de coluna a seguir.

Prefixo de coluna

Densidade calculada em

(CustomerId)

Linhas com valores correspondentes para CustomerId.

(CustomerId, ItemId)

Linhas com valores correspondentes para CustomerId e ItemId

(CustomerId, ItemId, Price)

Linhas com valores correspondentes para CustomerId, ItemId e Price

Restrições

DBCC SHOW_STATISTICS não fornece estatísticas para índices espaciais

Permissões

Para exibir o objeto de estatísticas, o usuário deve ser dono da tabela ou deve ser um membro da função de servidor fixa sysadmin, da função de banco de dados fixa db_owner ou da função de banco de dados fixa db_ddladmin.

Exemplos

A. Retornando todas as informações de estatísticas

O exemplo a seguir exibe todas as informações de estatísticas do índice AK_Product_Name da tabela Person.Address .

USE AdventureWorks2008R2;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
GO

B. Especificando a opção HISTROGRAM

O exemplo a seguir limita as informações de estatísticas exibidas para o índice AK_Product_Name aos dados de HISTOGRAM.

USE AdventureWorks2008R2;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) WITH HISTOGRAM;
GO