sys.dm_db_stats_histogram (Transact-SQL)sys.dm_db_stats_histogram (Transact-SQL)

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Retorna o histograma de estatísticas para o objeto de banco de dados especificado (tabela ou exibição indexada) no atual SQL ServerSQL Server banco de dados.Returns the statistics histogram for the specified database object (table or indexed view) in the current SQL ServerSQL Server database. Semelhante ao DBCC SHOW_STATISTICS WITH HISTOGRAM.Similar to DBCC SHOW_STATISTICS WITH HISTOGRAM.

Observação

Essa DMF está disponível começando com SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 CU2This DMF is available starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 CU2

SintaxeSyntax

sys.dm_db_stats_histogram (object_id, stats_id)  

ArgumentosArguments

object_idobject_id
É a ID do objeto no banco de dados atual para o qual as propriedades de uma de suas estatísticas é solicitada.Is the ID of the object in the current database for which properties of one of its statistics is requested. object_id é int.object_id is int.

stats_idstats_id
É a ID de estatísticas do object_idespecificado.Is the ID of statistics for the specified object_id. A ID de estatísticas pode ser obtida na exibição de gerenciamento dinâmico sys.stats .The statistics ID can be obtained from the sys.stats dynamic management view. stats_id é int.stats_id is int.

Tabela retornadaTable Returned

Nome da colunaColumn name Tipo de dadosData type DescriçãoDescription
object_idobject_id intint ID do objeto (tabela ou exibição indexada) para o qual as propriedades do objeto de estatísticas serão retornadas.ID of the object (table or indexed view) for which to return the properties of the statistics object.
stats_idstats_id intint ID do objeto de estatísticas.ID of the statistics object. É exclusiva na tabela ou exibição indexada.Is unique within the table or indexed view. Para obter mais informações, veja sys.stats (Transact-SQL).For more information, see sys.stats (Transact-SQL).
step_numberstep_number intint O número da etapa no histograma.The number of step in the histogram.
range_high_keyrange_high_key sql_variantsql_variant Valor da coluna associada superior de uma etapa do histograma.Upper bound column value for a histogram step. O valor da coluna também será denominado um valor de chave.The column value is also called a key value.
range_rowsrange_rows realreal Número estimado de linhas cujo valor de coluna fica dentro de uma etapa do histograma, excluindo-se o limite superior.Estimated number of rows whose column value falls within a histogram step, excluding the upper bound.
equal_rowsequal_rows realreal Número estimado de linhas cujo valor de coluna é igual ao limite superior da etapa do histograma.Estimated number of rows whose column value equals the upper bound of the histogram step.
distinct_range_rowsdistinct_range_rows bigintbigint Número estimado de linhas com um valor de coluna distinto dentro de uma etapa do histograma, excluindo-se o limite superior.Estimated number of rows with a distinct column value within a histogram step, excluding the upper bound.
average_range_rowsaverage_range_rows realreal Número médio de linhas com valores de coluna duplicados dentro de uma etapa de histograma, exceto o limite superior (RANGE_ROWS / DISTINCT_RANGE_ROWS para DISTINCT_RANGE_ROWS > 0).Average number of rows with duplicate column values within a histogram step, excluding the upper bound (RANGE_ROWS / DISTINCT_RANGE_ROWS for DISTINCT_RANGE_ROWS > 0).

ComentáriosRemarks

O conjunto de resultados para sys.dm_db_stats_histogram retorna informações semelhantes às DBCC SHOW_STATISTICS WITH HISTOGRAM e também inclui object_id, stats_id, e step_number.The resultset for sys.dm_db_stats_histogram returns information similar to DBCC SHOW_STATISTICS WITH HISTOGRAM and also includes object_id, stats_id, and step_number.

Porque a coluna range_high_key é um dados sql_variant tipo, você talvez precise usar CAST ou CONVERT se um predicado faz a comparação com uma constante de cadeia de caracteres não.Because the column range_high_key is a sql_variant data type, you may need to use CAST or CONVERT if a predicate does comparison with a non-string constant.

HistogramaHistogram

Um histograma mede a frequência de ocorrência de cada valor distinto em um conjunto de dados.A histogram measures the frequency of occurrence for each distinct value in a data set. 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.The query optimizer computes a histogram on the column values in the first key column of the statistics object, selecting the column values by statistically sampling the rows or by performing a full scan of all rows in the table or view. 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.If the histogram is created from a sampled set of rows, the stored totals for number of rows and number of distinct values are estimates and do not need to be whole integers.

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.To create the histogram, the query optimizer sorts the column values, computes the number of values that match each distinct column value and then aggregates the column values into a maximum of 200 contiguous histogram steps. Cada etapa inclui uma gama de valores de colunas seguidos por um valor de coluna associada superior.Each step includes a range of column values followed by an upper bound column value. O intervalo inclui todos os possíveis valores de coluna entre valores de limite, excluindo-se os próprios valores de limite em si.The range includes all possible column values between boundary values, excluding the boundary values themselves. O mais baixo dos valores de coluna classificados é o valor do limite superior da primeira etapa do histograma.The lowest of the sorted column values is the upper boundary value for the first histogram step.

O diagrama a seguir mostra um histograma com seis etapas:The following diagram shows a histogram with six steps. A área à esquerda do primeiro valor do limite superior corresponde à primeira etapa.The area to the left of the first upper boundary value is the first step.

Para cada etapa do histograma:For each histogram step:

  • A linha em negrito representa o valor do limite superior (range_high_key) e o número de vezes que ele ocorre (equal_rows)Bold line represents the upper boundary value (range_high_key) and the number of times it occurs (equal_rows)

  • A área sólida à esquerda de range_high_key representa o intervalo de valores de coluna e o número médio de vezes que cada valor de coluna ocorre (average_range_rows).Solid area left of range_high_key represents the range of column values and the average number of times each column value occurs (average_range_rows). As average_range_rows da primeira etapa do histograma são sempre 0.The average_range_rows for the first histogram step is always 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).Dotted lines represent the sampled values used to estimate total number of distinct values in the range (distinct_range_rows) and total number of values in the range (range_rows). O otimizador de consulta usa range_rows e distinct_range_rows para calcular average_range_rows e não armazena os valores amostrados.The query optimizer uses range_rows and distinct_range_rows to compute average_range_rows and does not store the sampled values.

O otimizador de consulta define as etapas do histograma de acordo com o significado estatístico delas.The query optimizer defines the histogram steps according to their statistical significance. 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.It uses a maximum difference algorithm to minimize the number of steps in the histogram while maximizing the difference between the boundary values. O número máximo de etapas é 200.The maximum number of steps is 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.The number of histogram steps can be fewer than the number of distinct values, even for columns with fewer than 200 boundary points. Por exemplo, uma coluna com 100 valores distintos pode ter um histograma com menos de 100 pontos de limite.For example, a column with 100 distinct values can have a histogram with fewer than 100 boundary points.

PermissõesPermissions

Requer que o usuário tenha permissões selecionadas em colunas de estatísticas, que ele possua a tabela ou que seja 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.Requires that the user has select permissions on statistics columns or the user owns the table or the user is a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role.

ExemplosExamples

A.A. Exemplo simplesSimple example

O exemplo a seguir cria e preenche uma tabela simples.The following example creates and populates a simple table. Em seguida, cria estatísticas no Country_Name coluna.Then creates statistics on the Country_Name column.

CREATE TABLE Country
(Country_ID int IDENTITY PRIMARY KEY,
Country_Name varchar(120) NOT NULL);
INSERT Country (Country_Name) VALUES ('Canada'), ('Denmark'), ('Iceland'), ('Peru');

CREATE STATISTICS Country_Stats  
    ON Country (Country_Name) ;  

A chave primária ocupa stat_id número 1, portanto, chame sys.dm_db_stats_histogram para stat_id número 2, para retornar o histograma de estatísticas para o Country tabela.The primary key occupies stat_id number 1, so call sys.dm_db_stats_histogram for stat_id number 2, to return the statistics histogram for the Country table.

SELECT * FROM sys.dm_db_stats_histogram(OBJECT_ID('Country'), 2);

B.B. Consultas úteis:Useful query:

SELECT hist.step_number, hist.range_high_key, hist.range_rows, 
    hist.equal_rows, hist.distinct_range_rows, hist.average_range_rows
FROM sys.stats AS s
CROSS APPLY sys.dm_db_stats_histogram(s.[object_id], s.stats_id) AS hist
WHERE s.[name] = N'<statistic_name>';

C.C. Consultas úteis:Useful query:

O exemplo a seguir seleciona da tabela Country com um predicado na coluna Country_Name.The following example selects from table Country with a predicate on column Country_Name.

SELECT * FROM Country 
WHERE Country_Name = 'Canada';

O exemplo a seguir examina a estatística criada anteriormente na tabela Country e na coluna Country_Name para a etapa de histograma correspondente ao predicado na consulta acima.The following example looks at the previously created statistic on table Country and column Country_Name for the histogram step matching the predicate in the query above.

SELECT ss.name, ss.stats_id, shr.steps, shr.rows, shr.rows_sampled, 
    shr.modification_counter, shr.last_updated, sh.range_rows, sh.equal_rows
FROM sys.stats ss
INNER JOIN sys.stats_columns sc 
    ON ss.stats_id = sc.stats_id AND ss.object_id = sc.object_id
INNER JOIN sys.all_columns ac 
    ON ac.column_id = sc.column_id AND ac.object_id = sc.object_id
CROSS APPLY sys.dm_db_stats_properties(ss.object_id, ss.stats_id) shr
CROSS APPLY sys.dm_db_stats_histogram(ss.object_id, ss.stats_id) sh
WHERE ss.[object_id] = OBJECT_ID('Country') 
    AND ac.name = 'Country_Name'
    AND sh.range_high_key = CAST('Canada' AS CHAR(8));

Consulte tambémSee Also

DBCC SHOW_STATISTICS (Transact-SQL) DBCC SHOW_STATISTICS (Transact-SQL)
Objeto (Transact-SQL) de funções e exibições de gerenciamento dinâmico relacionadas aoObject Related Dynamic Management Views and Functions (Transact-SQL)
sys.dm_db_stats_properties (Transact-SQL)sys.dm_db_stats_properties (Transact-SQL)