¿Qué son las estadísticas de la base de datos y cómo puedo beneficiarme de ellas?

18

He escuchado mencionar estadísticas que SQL Server mantiene de manera predeterminada. ¿Qué están rastreando y cómo puedo usar esta información para mejorar mi base de datos?

goric
fuente

Respuestas:

21

Las estadísticas simplemente son una forma de metadatos dinámicos que ayudan al optimizador de consultas a tomar mejores decisiones. Por ejemplo, si solo hay una docena de filas en una tabla, entonces no tiene sentido ir a un índice para hacer una búsqueda; siempre será mejor hacer un escaneo completo de la tabla. Pero si esa misma tabla crece a un millón de filas, entonces probablemente será mejor que use el índice. Pero si consulta esa tabla en una columna que solo tiene muy pocos valores únicos (por ejemplo, podría ser una columna de "sexo" que contiene solo "M" o "F"), en realidad un FTS podría ser mejor en ese caso porque necesita recuperar el bloque de todos modos para construir el conjunto de resultados. Ahora digamos que su tabla es 99% "M" y solo 1% "F", deberíamos FTS en un caso o usar un índice en el otro. Misma tabla, misma consulta, potencialmente cuatro planes de consulta diferentes según el contenido de la tabla. Este tipo de cosas son las "estadísticas" y son individuales para cada base de datos; incluso dos bases de datos con una estructura idéntica de tablas e índices tendrán estadísticas diferentes.

En resumen, en un motor de base de datos moderno hay dos tipos de optimización de consultas: reescribir el SQL (optimización basada en reglas, como un compilador reescribe su C para hacerlo más eficiente) y elegir la ruta correcta de los datos (optimización basada en costos , como un compilador JIT que identifica puntos de acceso en tiempo de ejecución). Solo necesita preocuparse por esto si ve que el optimizador de consultas está haciendo algo obviamente incorrecto (por ejemplo, elegir FTS cuando sabe que un índice sería mejor).

Gayo
fuente
2
+1 No podría haberlo explicado mejor. Es importante recordar que las estadísticas solo son útiles si se mantienen actualizadas. Esto se puede hacer con estadísticas de actualización automática o un comando de estadísticas de actualización programado regularmente (por noche / semana). Además, las reconstrucciones de índice realizarán automáticamente una actualización de estadísticas.
Matt M
5

Los utiliza el optimizador de consultas (documento técnico en MSDN) para rastrear la distribución de valores en índices y / o columnas.

Su única preocupación debería ser actualizar regularmente : simplemente deje el motor DB para hacer sus cosas

gbn
fuente
2
No siempre. Hay momentos en que crear una estadística manualmente puede ayudar al rendimiento de la consulta.
mrdenny
@mrdenny: ¿Con qué frecuencia has hecho esto en la vida real? Muy raramente No tengo IIRC. Si necesita estadísticas, se podría argumentar que necesita un índice, que tiene estadísticas de todos modos. Solo puede crear estadísticas de columna según CREATE STATISTICS . Dado que OP tuvo que preguntar sobre estadísticas, diría que esto es algo justo que hacer.
gbn
1
Lo he hecho un par de veces, pero no con frecuencia. Estaba yendo en contra de su declaración "Su única preocupación debería ser actualizar regularmente", ya que actualizar las estadísticas no es lo único.
mrdenny