Hay algo en SQL SERVER que se llama STATISTICS (estadísticas) y que nos permite ganar performance a la hora de hacer consultas.
Me explico:
En SQL SERVER tenemos lo que se llama "plan de ejecución", que dicho de manera no técnica sería el camino que el SQL SERVER supone más óptimo para abordar una determinada consulta hacia una o varias tabla(s) dada(s) de la base de datos.
Osea, la probable mejor forma de recuperar datos de la base de datos.
Seguro me preguntarás:
y en qué se basan esos planes de ejecución? Pues en las estadísticas (que desde este momento llamaremos STATISTICS).
Y en qué se basan las STATISTICS? pues las STATISTICS son la metadata de las columnas con índices de las tablas.
Es decir, son las respuestas a:
cuántas filas y páginas tiene una tabla, cómo es la distribución de la data, información sobre las columnas claves, histograma del crecimiento de los datos, etc.
Pero no todo es color de rosa:
así como los datos están constantemente siendo modificados, borrados, insertados, también las STATISTICS necesitan estar actualizadas.
Eso significa que las STATISTICS se desactualizan? exacto.
Sin embargo, se supone que las STATISTICS se actualizan automáticamente, y esto es cierto, pero no siempre...
entonces, cuáles son los disparadores para que esta actualización ocurra??
La actualización de STATISTICS se da cuando la tabla crece o decrece + - en un 10% de su total de registros. Osea, si tu tabla tiene 100 registros y te vuelas 10 o más, la actualización de STATISTICS ocurre.Y si tu tabla tiene 100 registros y añades 10 o más, la actualización de STATISTICS ocurre.
Si tu tabla tiene 100 registros y te vuelas 1, LA ACTUALIZACIÓN DE STATISTICS NO OCURRE!! ajá, he ahí el problema!!
Cómo lo solucionamos??
Es aquí cuando tenemos que hacer la actualización manual de las STATISTICS, veamos cómo se hace eso.
Se puede hacer de dos formas:
1.- Usando el procedimiento almacenado sp_updatestats
Este procedimiento almacenado actualiza las tablas de usuario y también las tablas del sistema de toda una base de datos.
Ejemplo:
use Northwind
go
exec sp_updatestats
go
2.- A través del comando UPDATE STATISTICS.
Esta es la manera más flexible.
Permite combinar una serie de opciones adicionales, como:
FULLSCAN, realiza un escaneo completo del índice o columna en observación
WITH SAMPLE (PERCENT, ROWS), permite ingresar el porcentaje o número de filas que deseamos que se use como muestra
RESAMPLE, permitirá incluir a los nuevos registros en la muestra para hacer las STATISTICS
ALL / COLUMNS / INDEX, especifica qué STATISTICS actualizar
NORECOMPUTE, indicará que las filas que son añadidas después de esta actualización, no sean incluidas en las siguientes actualizaciones de STATISTICS.
use Northwind
go
UPDATE STATISTICS Employees WITH SAMPLE 35 PERCENT, ALL
go
También podemos saber si un índice ha sido actualizado (y cuándo... claro está) usando el comando DBCC SHOW_STATISTICS:
DBCC SHOW_STATISTICS ( MyTableName, MyIndexName )
Y qué sabes del comando CREATE STATISTICS?
Jeje... tienes razón, no he dicho nada al respecto.
En el próximo post hablaremos de ello.
No hay comentarios.:
Publicar un comentario