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 Utilizar las estadísticas para mejorar el rendimiento de las consultas.

Icono de vínculo a temasConvenciones 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.

Actualizada

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 Utilizar las estadísticas para mejorar el rendimiento de las consultas.

Filas muestreadas

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.

Densidad

Se calcula como 1 / valores distintos 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 utiliza este valor de Densidad y solo se muestra por motivos de compatibilidad con versiones anteriores a SQL Server 2008.

Promedio de longitud de clave

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..

Expresión de filtro

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 Directrices generales para diseñar índices filtrados. Para obtener más información sobre estadísticas filtradas, vea Utilizar las estadísticas para mejorar el rendimiento de las consultas.

Filas sin filtrar

Número total de filas de la tabla antes de aplicar la expresión de filtro. Si Expresión de filtro es NULL, las Filas sin filtrar son iguales a Filas.

En la tabla siguiente se describen las columnas devueltas en el conjunto de resultados si se especifica DENSITY_VECTOR.

Nombre de columna

Descripción

Toda la densidad

La densidad es 1 / valores distintos. 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)

Promedio de longitud

Longitud media, 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 Toda la densidad y Promedio de longitud.

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 estimado de filas cuyo valor de columna es igual al límite superior del paso del histograma.

DISTINCT_RANGE_ROWS

Número estimado 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.

Histograma con 6 pasos

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 IdCliente, IdArtículo, Precio, la densidad se calcula en cada uno de los siguientes prefijos de columna.

Prefijo de columna

Densidad calculada en

(IdCliente)

Filas con valores que se corresponden con IdCliente

(IdCliente, IdArtículo)

Filas con valores que se corresponden con IdCliente e IdArtículo

(IdCliente, IdArtículo, Precio)

Filas con valores que se corresponden con IdCliente, IdArtículo y Precio

Restricciones

DBCC SHOW_STATISTICS no proporciona estadísticas de índices 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.

Ejemplos

A. Devolver información de todas las estadísticas

En el siguiente ejemplo se muestra información de todas las estadísticas del índice AK_Product_Name de la tabla Person.Address .

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

B. Especificar la opción HISTROGRAM

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 AdventureWorks2008R2;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) WITH HISTOGRAM;
GO