lunes, 14 de junio de 2010

Indices perdidos

Cuando creamos nuestros objetos de base de datos, concretamente Tablas y vistas indexa-das suele ocurrir que no contemplemos todos los índices que serán necesarios para satisfacer nuestras llamadas a la Base de Datos.

Una forma de identificar índices perdidos (no existen) es hacer uso de la vista del sistema sys.dm_db_missing_index_details la cual nos regresa información detallada de los índices que hacen falta en nuestra Base de datos. Si nuestra labor fuera supervisar el funcionamiento de un servidor o un conjunto de servidores con una o más instancias de SQL Server lo correcto sería empezar a dar prioridad a las Bases de Datos con un número de índices no creados más alto, para lo cual podemos hacer uso del siguiente script:

SELECT
DB_NAME(database_id) [Nombre de base de datos]
, count(*) [Numero de indices perdidos]
FROM sys.dm_db_missing_index_details
GROUP BY DB_NAME(database_id)
ORDER BY 2 DESC;


Una vez que sabemos que Base de datos es la que nos puede involucrar en mayor medida índices que no fueron creados el siguiente paso es identificar las tablas y columnas que corresponden a dichos índices.



Hasta aquí hemos visto en que nos podemos apoyar, nuestro siguiente paso es generar un script que nos retorne el detalle de los índices perdidos:

SELECT TOP 100
DB_NAME(database_id) [Nombre de base de datos]
,[Costo total] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)
, avg_user_impact
, TableName = statement
, [EqualityUsage] = equality_columns
, [InequalityUsage] = inequality_columns
, [Include Cloumns] = included_columns
FROM sys.dm_db_missing_index_groups g
INNER JOIN sys.dm_db_missing_index_group_stats s
ON s.group_handle = g.index_group_handle
INNER JOIN sys.dm_db_missing_index_details d
ON d.index_handle = g.index_handle
ORDER BY [Nombre de base de datos],[Costo total] DESC;


Una vez analizado este punto, podemos darnos cuenta que el crear los índices perdidos no es un proceso que se pueda automatizar de una manera por decir sencilla, ya que la creación de un índice que involucra más de una columna y que incluso tiene columnas de tipo INCLUDE es una tarea que debe ser revisada detalladamente, pues el orden de las columnas en que establezcamos la creación de nuestros índices puede marcar la diferencia entre un índice bien construido y uno mal o regularmente construido.

No hay comentarios:

Publicar un comentario