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

SE APLICA A: síSQL Server (a partir de 2016) síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2016) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Devuelve el histograma de estadísticas para el objeto de base de datos especificado (tabla o vista indizada) en el actual SQL ServerSQL Server base de datos.Returns the statistics histogram for the specified database object (table or indexed view) in the current SQL ServerSQL Server database. Similar a DBCC SHOW_STATISTICS WITH HISTOGRAM.Similar to DBCC SHOW_STATISTICS WITH HISTOGRAM.

Nota

Está disponible a partir de esta DMF 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

SintaxisSyntax

sys.dm_db_stats_histogram (object_id, stats_id)  

ArgumentosArguments

object_idobject_id
Es el identificador del objeto en la base de datos actual para el que se han solicitado propiedades de una de sus estadísticas.Is the ID of the object in the current database for which properties of one of its statistics is requested. object_id es int.object_id is int.

stats_idstats_id
Es el identificador de estadísticas para el object_idespecificado.Is the ID of statistics for the specified object_id. El identificador de estadísticas se puede obtener desde la vista de administración dinámica sys.stats .The statistics ID can be obtained from the sys.stats dynamic management view. stats_id es int.stats_id is int.

Tabla devueltaTable Returned

Nombre de columnaColumn name Tipo de datosData type DescripciónDescription
object_idobject_id intint Identificador del objeto (tabla o vista indizada) para el que se devuelven las propiedades del objeto de estadísticas.ID of the object (table or indexed view) for which to return the properties of the statistics object.
stats_idstats_id intint Identificador del objeto de estadísticas.ID of the statistics object. Es único dentro de la vista indizada o la tabla.Is unique within the table or indexed view. Para obtener más información, vea sys.stats (Transact-SQL).For more information, see sys.stats (Transact-SQL).
step_numberstep_number intint El número de paso del histograma.The number of step in the histogram.
range_high_keyrange_high_key sql_variantsql_variant Valor de columna límite superior de un paso del histograma.Upper bound column value for a histogram step. El valor de columna también se denomina valor de clave.The column value is also called a key value.
RANGE_ROWSrange_rows realreal Número calculado de filas cuyo valor de columna está comprendido en un paso del histograma, sin incluir el límite superior.Estimated number of rows whose column value falls within a histogram step, excluding the upper bound.
equal_rowsequal_rows realreal Número calculado de filas cuyo valor de columna es igual al límite superior del paso del histograma.Estimated number of rows whose column value equals the upper bound of the histogram step.
DISTINCT_RANGE_ROWSdistinct_range_rows bigintbigint Número calculado de filas que tienen un valor de columna distinto en un paso del histograma, sin incluir el límite 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 promedio de filas con valores de columna duplicados en un paso del histograma, excluido el límite 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).

ComentariosRemarks

El conjunto de resultados de sys.dm_db_stats_histogram devuelve información similar a DBCC SHOW_STATISTICS WITH HISTOGRAM y también incluye object_id, stats_id, y 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.

Dado que la columna range_high_key es una de datos sql_variant tipo, es posible que deba usar CAST o CONVERT si lleva a un predicado de comparación con una constante que no son de cadena.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

Un histograma mide la frecuencia de aparición de cada valor distinto en un conjunto de datos.A histogram measures the frequency of occurrence for each distinct value in a data set. El optimizador de consultas calcula un histograma de los valores de la primera columna de clave del objeto de estadísticas; para ello, selecciona los valores de la columna tomando una muestra estadística de las filas o realizando un análisis completo de todas las filas de la tabla o vista.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. Si el histograma se crea a partir de muestras de un conjunto de filas, los totales almacenados para el número de filas y el número de valores distintos son las estimaciones y no es necesario que sean números enteros.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 crear el histograma, el optimizador de consultas ordena los valores de columna, calcula el número de valores que coinciden con cada valor de columna distinto y, a continuación, agrupa los valores de columna en un máximo de 200 pasos de histograma contiguos.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 paso incluye un intervalo de valores de columna seguido de un valor de columna de límite superior.Each step includes a range of column values followed by an upper bound column value. El intervalo incluye todos los valores de columna posibles comprendidos entre los valores límite (sin incluir los propios valores límite).The range includes all possible column values between boundary values, excluding the boundary values themselves. El valor de columna ordenado más pequeño es el valor del límite superior del primer paso del histograma.The lowest of the sorted column values is the upper boundary value for the first histogram step.

En el diagrama siguiente se muestra un histograma con seis pasos.The following diagram shows a histogram with six steps. El área a la izquierda del primer valor límite superior es el primer paso.The area to the left of the first upper boundary value is the first step.

En cada paso del histograma:For each histogram step:

  • La línea gruesa representa el valor de límite superior (range_high_key) y el número de veces que tiene lugar (equal_rows).Bold line represents the upper boundary value (range_high_key) and the number of times it occurs (equal_rows)

  • El área de color sólido situada a la izquierda de range_high_key representa el rango de valores de columna y el número medio de veces que tiene lugar cada valor de columna (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). El valor de average_range_rows en el primer paso del histograma siempre es 0.The average_range_rows for the first histogram step is always 0.

  • Las líneas de puntos representan los valores de las muestras utilizados para estimar el número total de valores distintos que hay en el rango (distinct_range_rows) y el número total de valores que hay en el rango (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). El optimizador de consultas utiliza range_rows y distinct_range_rows para calcular average_range_rows y no almacena los valores de las muestras.The query optimizer uses range_rows and distinct_range_rows to compute average_range_rows and does not store the sampled values.

El optimizador de consultas define los pasos del histograma en función de su importancia estadística.The query optimizer defines the histogram steps according to their statistical significance. Utiliza un algoritmo de diferencias máximas para minimizar el número de pasos del histograma a la vez que minimiza las diferencias entre los valores límite.It uses a maximum difference algorithm to minimize the number of steps in the histogram while maximizing the difference between the boundary values. El número máximo de pasos es 200.The maximum number of steps is 200. El número de pasos del histograma puede ser menor que el número de valores distintos, incluso para las columnas con menos de 200 puntos de límite.The number of histogram steps can be fewer than the number of distinct values, even for columns with fewer than 200 boundary points. Por ejemplo, una columna con 100 valores distintos puede tener un histograma con menos de 100 puntos de límite.For example, a column with 100 distinct values can have a histogram with fewer than 100 boundary points.

PermisosPermissions

Necesita que el usuario tenga permisos de selección en columnas de estadísticas o posea la tabla, o que el usuario sea miembro del rol fijo de servidor sysadmin, del rol fijo de base de datos db_owner o del rol fijo de base de datos 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.

EjemplosExamples

A.A. Ejemplo sencilloSimple example

El ejemplo siguiente se crea y rellena una tabla sencilla.The following example creates and populates a simple table. A continuación, crea las estadísticas en la Country_Name columna.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) ;  

La clave principal se ocupa stat_id número 1, por lo que se llame a sys.dm_db_stats_histogram para stat_id número 2, para devolver el histograma de estadísticas para el Country tabla.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 útiles: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 útiles:Useful query:

Selecciona el siguiente ejemplo de tabla Country con un predicado en la columna Country_Name.The following example selects from table Country with a predicate on column Country_Name.

SELECT * FROM Country 
WHERE Country_Name = 'Canada';

El ejemplo siguiente se examina la estadística creada anteriormente en la tabla Country y la columna Country_Name el paso del histograma que coinciden con el predicado en la consulta anterior.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));

Vea tambiénSee Also

DBCC SHOW_STATISTICS (Transact-SQL) DBCC SHOW_STATISTICS (Transact-SQL)
Funciones (Transact-SQL) y vistas de administración dinámica relacionadas con objetosObject Related Dynamic Management Views and Functions (Transact-SQL)
sys.dm_db_stats_properties (Transact-SQL)sys.dm_db_stats_properties (Transact-SQL)