martes, 20 de noviembre de 2007

STATISTICS SQL SERVER - II

En el post anterior acerca de STATISTICS también, les decía que me faltó hablar del comando CREATE STATISTICS, y quedó pendiente verdad? pues empecemos el rollo.
Cuando creamos un índice (INDEX) sobre una o varias columnas, lo hacemos porque sabemos que esa(s) columna(s) serán usadas en la cláusula WHERE de una consulta... cierto? sino no tiene caso el índice.
Hasta aquí estamos de acuerdo? Entonces sigamos.
Ahora, cuando en el WHERE de una consulta se incluyen varias columnas, y bajo estas columnas no se ha creado un índice que los haya agrupado... pues la consulta no va a ser resuelta con la mejor performance.
Es en estos casos cuando es el momento adecuado de usar el comando CREATE STATISTICS:
Osea, debemos usar el comando CREATE STATISTICS cuando surge la necesidad de agrupar varias columnas, de modo que las estadísticas generadas (en base a esas columnas) permitirán llevar a buen puerto la consulta ejecutada, porque las estadísticas crean un histograma con los grupos de densidad asociados (colecciones) sobre la columna o conjunto de columnas especificados (revisen el post anterior).
Vamos con un ejemplo:
Digamos que necesito filtrar los registros de una tabla, así:
USE Northwind
GO
SELECT * FROM Employees
WHERE LastName LIKE 'A%' AND FirstName LIKE 'B%' AND Title LIKE 'C%'
Para que mi consulta sea optimizada, sería bueno que hubiese un INDEX(LastName,FirstName, Title), cierto? claro.
Pero la tabla Employees no tiene ese índice, chequeen:
EXEC sp_helpindex employees
Entonces nosotros aplicamos:
CREATE STATISTICS Name_statistics
ON Employees (LastName, FirstName, Title)
Y fuahhhhh!!!!, las estadísticas se crean.
Ahora bien, la ejecución de la consulta sobre la tabla Employees ya debería ser mucho más rápida, pues eso es posible gracias a los histogramas e información sobre la distribución generados de los datos.
Ahora, te estarás preguntando:
Por qué diablos simplemente no hice un CREATE INDEX sobre esas columnas?
La respuesta es: hazlo si quieres.
Debido a la respuesta que te di, entonces tu avispado cerebro se estará preguntando:
hay alguna diferencia entre CREATE STATISTICS o CREATE INDEX?
No pes, son cosas distintas.
Te explico:
Las estadísticas son usadas para determinar qué índices se deben usar cuando se procese una consulta. Son complementarios, no rivales.
Tan simple como eso. Mira que después de dos post de full palabreo, termino diciéndote cómo funcionan las STATISTICS, jeje.

No hay comentarios.: