DBCC SHOW_STATISTICS (Transact-SQL)
DBCC SHOW_STATISTICS muestra las estadísticas de optimización de consulta actuales de una tabla o vista indizada. El optimizador de consultas utiliza las estadísticas para estimar la cardinalidad o el número de filas del resultado de la consulta, lo que hace posible que el optimizador de consultas pueda crear un plan de consulta de alta calidad. Por ejemplo, el optimizador de consultas podría utilizar las estimaciones de cardinalidad para elegir el operador index seek en lugar del operador index scan en el plan de consulta, lo que mejoraría el rendimiento de las consultas al evitar el examen de índices con una gran cantidad de recursos.
El optimizador de consultas almacena las estadísticas de una tabla o vista indizada en un objeto de estadísticas. En una tabla, el objeto de estadísticas se crea en un índice o en una lista de columnas de la tabla. El objeto de estadísticas incluye un encabezado con metadatos sobre las estadísticas, un histograma con la distribución de valores de la primera columna de clave del objeto de estadísticas y un vector de la densidad para medir la correlación entre las columnas. Motor de base de datos puede calcular las estimaciones de cardinalidad con cualquiera de los datos del objeto de estadísticas.
DBCC SHOW_STATISTICS muestra el encabezado, el histograma y el vector de densidad en función de los datos guardados en el objeto de estadísticas. La sintaxis le permite especificar una tabla o vista indizada junto con un nombre del índice de destino, un nombre de las estadísticas o un nombre de columna. En este tema se describe cómo se muestran las estadísticas y cómo se interpretan los resultados mostrados.
Para obtener más información, vea Estadísticas.
Convenciones de sintaxis de Transact-SQL
Sintaxis
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
Nombre de la tabla o de la vista indizada cuya información de estadísticas se va a presentar.target
Nombre del índice, estadística o columna cuya información de estadísticas se va a presentar. Si target es el nombre de un índice o estadística existentes en una tabla o vista indizada, se devuelve la información de estadísticas acerca de este destino. Si target es el nombre de una columna existente y dicha columna contiene una estadística creada automáticamente, se devuelve información sobre dicha estadística. Si una estadística creada automáticamente no existe para el destino de una columna, se devuelve el mensaje de error 2767.NO_INFOMSGS
Suprime todos los mensajes informativos con niveles de gravedad entre 0 y 10.STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM [ **,**n ]
La especificación de una o varias de estas opciones limita los conjuntos de resultados devueltos por la instrucción a la opción u opciones especificadas. Si no se especifican opciones, se devuelve información de todas las estadísticas.STATS_STREAM es Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.
Conjuntos de resultados
En la tabla siguiente se describen las columnas devueltas en el conjunto de resultados si se especifica STAT_HEADER.
Nombre de columna |
Descripción |
---|---|
Name |
Nombre del objeto de estadísticas. |
Updated |
Fecha y hora de la última actualización de las estadísticas. La función STATS_DATE es un medio alternativo para recuperar esta información. |
Rows |
Número total de filas que tenía la tabla o vista indizada la última vez que se actualizaron las estadísticas. Si las estadísticas se filtran o corresponden a un índice filtrado, el número de filas puede ser inferior al número de filas de la tabla. Para obtener más información, vea Estadísticas. |
Rows Sampled |
Número total de filas muestreadas para cálculos de estadísticas. Si Rows Sampled < Rows, el histograma y los resultados de la densidad que se muestren serán estimaciones extraídas de las filas muestreadas. |
Steps |
Número de pasos del histograma. Cada paso abarca un intervalo de valores de columna seguido de un valor de columna límite superior. Los pasos del histograma se definen en la primera columna de clave de las estadísticas. El número máximo de pasos es 200. |
Density |
Se calcula como 1 / distinct values en todos los valores de la primera columna de clave del objeto de estadísticas, excepto en los valores límite del histograma. El optimizador de consultas no usa este valor de densidad y solo se muestra por motivos de compatibilidad con versiones anteriores a SQL Server 2008. |
Average Key Length |
Número promedio de bytes por cada uno de los valor de las columnas de clave del objeto de estadísticas. |
String Index |
Sí indica que el objeto de estadísticas contiene estadísticas de resumen de las cadenas para mejorar los cálculos de cardinalidad de los predicados de consulta que utilizan el operador LIKE; por ejemplo, WHERE ProductName LIKE '%Bike'. Las estadísticas de resumen de cadenas se almacenan de forma independiente del histograma y se crean en la primera columna de clave del objeto de estadísticas cuando es de tipo char, varchar, nchar, nvarchar, varchar(max), nvarchar(max), text o ntext.. |
Filter Expression |
Predicado del subconjunto de filas de la tabla incluido en el objeto de estadísticas. NULL = Estadísticas no filtradas. Para obtener más información sobre predicados filtrados, vea Crear índices filtrados. Para obtener más información sobre estadísticas filtradas, vea Estadísticas. |
Unfiltered Rows |
Número total de filas de la tabla antes de aplicar la expresión de filtro. Si Filter Expression es NULL, Unfiltered Rows es igual a Rows. |
En la tabla siguiente se describen las columnas devueltas en el conjunto de resultados si se especifica DENSITY_VECTOR.
Nombre de columna |
Descripción |
---|---|
All Density |
La densidad es 1 / distinct values. Los resultados muestran la densidad de cada prefijo de columnas del objeto de estadísticas (una fila por cada densidad). Un valor distinto es una lista Distinct de los valores de columna de cada fila y prefijo de columna. Por ejemplo, si el objeto de estadísticas contiene las columnas de clave (A, B, C), los resultados indican la densidad de las listas de valores distintos de cada uno de estos prefijos de columna: (A), (A,B) y (A, B, C). Con el prefijo (A, B, C), cada una de estas listas es una lista de valores distintos: (3, 5, 6) (4, 4, 6) (4, 5, 6) (4, 5, 7). Con el prefijo (A, B) los mismos valores de columna tiene estas listas de valores distintos: (3, 5), (4, 4) y (4, 5) |
Average Length |
Promedio de longitud, en bytes, para almacenar una lista de los valores de columna del prefijo de columna. Por ejemplo, si cada valor de la lista (3, 5, 6) necesita 4 bytes, la longitud es 12 bytes. |
Columns |
Nombres de las columnas en el prefijo para las que se muestran All density y Average length. |
En la tabla siguiente se describen las columnas devueltas en el conjunto de resultados si se especifica la opción HISTOGRAM.
Nombre de columna |
Descripción |
---|---|
RANGE_HI_KEY |
Valor de columna límite superior de un paso del histograma. El valor de columna también se denomina valor de clave. |
RANGE_ROWS |
Número calculado de filas cuyo valor de columna está comprendido en un paso del histograma, sin incluir el límite superior. |
EQ_ROWS |
Número calculado de filas cuyo valor de columna es igual al límite superior del paso del histograma. |
DISTINCT_RANGE_ROWS |
Número calculado de filas que tienen un valor de columna distinto en un paso del histograma, sin incluir el límite superior. |
AVG_RANGE_ROWS |
Número medio de filas que tienen valores de columna duplicados en un paso del histograma, sin incluir el límite superior (RANGE_ROWS/DISTINCT_RANGE_ROWS para DISTINCT_RANGE_ROWS > 0). |
Comentarios
Histograma
Un histograma mide la frecuencia de aparición de cada valor distinto en un conjunto de datos. 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. 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.
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. Cada paso incluye un intervalo de valores de columna seguido de un valor de columna de límite superior. El intervalo incluye todos los valores de columna posibles comprendidos entre los valores límite (sin incluir los propios valores límite). El valor de columna ordenado más pequeño es el valor del límite superior del primer paso del histograma.
En el diagrama siguiente se muestra un histograma con seis pasos. El área a la izquierda del primer valor límite superior es el primer paso.
En cada paso del histograma:
La línea gruesa representa el valor de límite superior (RANGE_HI_KEY) y el número de veces que tiene lugar (EQ_ROWS).
El área de color sólido situada a la izquierda RANGE_HI_KEY representa el intervalo de valores de columna y el número medio de veces que tiene lugar cada valor de columna (AVG_RANGE_ROWS). El valor de AVG_RANGE_ROWS en el primer paso del histograma siempre es 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 intervalo (DISTINCT_RANGE_ROWS) y el número total de valores que hay en el intervalo (RANGE_ROWS). El optimizador de consultas utiliza RANGE_ROWS y DISTINCT_RANGE_ROWS para calcular AVG_RANGE_ROWS y no almacena los valores de las muestras.
El optimizador de consultas define los pasos del histograma en función de su importancia estadística. 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. El número máximo de pasos es 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. Por ejemplo, una columna con 100 valores distintos puede tener un histograma con menos de 100 puntos de límite.
Vector de densidad
El optimizador de consultas utiliza las densidades para mejorar las estimaciones de cardinalidad de las consultas que devuelven varias columnas de la misma tabla o vista indizada. El vector de densidad contiene una densidad para cada prefijo de columnas del objeto de estadísticas. Por ejemplo, si un objeto de estadísticas tiene las columnas de clave CustomerId, ItemId, Price, la densidad se calcula en cada uno de los siguientes prefijos de columna.
Prefijo de columna |
Densidad calculada en |
---|---|
(CustomerId) |
Filas con valores que se corresponden con CustomerId |
(CustomerId, ItemId) |
Filas con valores que se corresponden con CustomerId y ItemId |
(CustomerId, ItemId, Price) |
Filas con valores que se corresponden con CustomerId, ItemId y Price |
Restricciones
DBCC SHOW_STATISTICS no proporciona estadísticas de índices de almacén de columnas optimizadas en memoria xVelocity o espaciales.
Permisos
Para ver el objeto de estadísticas, el usuario debe ser propietario de la tabla o 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.
SQL Server 2012 SP1 modifica las restricciones de permisos y permite que los usuarios que dispongan del permiso SELECT pueden usar este comando. Tenga en cuenta los siguientes requisitos para que los permisos SELECT sean suficientes para ejecutar el comando:
Los usuarios deben tener permisos en todas las columnas del objeto de estadísticas
Los usuarios deben tener permiso en todas las columnas de una condición de filtro (si existe alguna)
Para deshabilitar este comportamiento, use la marca de seguimiento 9485.
Ejemplos
A.Devolver información de todas las estadísticas
En el ejemplo siguiente se muestra toda la información de estadísticas del índice AK_Product_Name de la tabla Person.Address .
USE AdventureWorks2012;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
GO
B.Especificar la opción HISTOGRAM
En el siguiente ejemplo se limita la información de estadísticas mostrada para el índice AK_Product_Name a los datos de HISTOGRAM.
USE AdventureWorks2012;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) WITH HISTOGRAM;
GO
Vea también
Referencia
CREATE STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)