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 Estatísticas.
Convenções da 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 |
---|---|
Name |
O nome do objeto de estatísticas. |
Updated |
Data e hora da última atualização de estatísticas. A função STATS_DATE é uma maneira alternativa de recuperar essas informações. |
Rows |
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, consulteEstatísticas. |
Rows Sampled |
O número total de linhas amostradas 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. |
Steps |
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. |
Density |
Calculada como 1 / distinct values para todos os valores na primeira coluna de chave do objeto de estatísticas, exceto 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. |
Average Key Length |
O número médio de bytes por valor para todas as colunas de chave do objeto de estatísticas. |
String Index |
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. |
Filter Expression |
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 Criar índices filtrados. Para obter mais informações sobre estatísticas filtradas, consulte Estatísticas. |
Unfiltered Rows |
O número total de linhas na tabela antes da aplicação da expressão de filtro. Se Filter Expression for NULL, Unfiltered Rows será igual a Rows. |
A tabela a seguir descreve as colunas retornadas no conjunto de resultados quando DENSITY_VECTOR é especificado.
Nome da coluna |
Descrição |
---|---|
All Density |
A densidade é 1 / distinct values. 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) |
Average Length |
O comprimento médio, em bytes, para armazenar uma lista dos valores das colunas para o prefixo da coluna. Por exemplo, se cada um dos valores na lista (3, 5, 6) exigirem 4 bytes, o comprimento será de 12 bytes. |
Columns |
Os nomes das colunas no prefixo para as quais All density e Average length 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 é chamado de valor de chave. |
RANGE_ROWS |
Número estimado de linhas cujo valor de coluna fica dentro de uma etapa do histograma, com a exclusão do 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, com a exclusão do limite superior. |
AVG_RANGE_ROWS |
Número médio de linhas com valores de colunas duplicados dentro de uma etapa do histograma, com a exclusão do 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 do limite superior da primeira etapa do histograma.
O diagrama a seguir mostra um histograma com seis etapas: A área à esquerda do primeiro valor do limite superior corresponde à primeira etapa.
Para cada etapa do histograma:
A linha em negrito representa o valor do 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 ou de columnstore xVelocity de memória otimizada.
Permissões
Para exibir o objeto de estatísticas, o usuário deve ser proprietário da tabela ou membro da função de servidor fixa sysadmin ou das funções de banco de dados fixas db_owner ou db_ddladmin.
O SQL Server 2012 SP1 modifica as restrições de permissão e permite que os usuários com a permissão SELECT utilizem esse comando. Para que as permissões SELECT sejam suficientes para executar o comando, é necessário atender aos seguintes requisitos:
Os usuários devem ter permissões em todas as colunas do objeto de estatísticas
Os usuários devem ter permissão em todas as colunas em uma condição de filtro (se houver)
Para desabilitar esse comportamento, use o traceflag 9485.
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 AdventureWorks2012;
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 AdventureWorks2012;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) WITH HISTOGRAM;
GO
Consulte também
Referência
CREATE STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)