Categorías
Donaciones

Todo el contenido es gratuito y en beneficio de la comunidad. Puedes reconocer el esfuerzo con una donación si lo deseas.

Inserte aquí su publicidad

La indexación en SQL Server es un arte que se aprende poco a poco, requiere de bastante experiencia y también hace falta contar con un conocimiento importante de lo que son las tripas de las aplicaciones. Sin embargo, los primeros pasos son sencillos, esto es, crea un índice clustered en cada tabla, y si no sabes cuál poner, pon la clave primaria.

En el segundo escalón, en el que hoy me centraré, está dejar que sea el propio motor quien nos diga, basándose en lo que se ejecuta, qué índices vendrían bien para el rendimiento. No es algo para seguir al pie de la letra, pero ojo, es una estadística, está basado en datos. Y uno no siempre sabe si una sentencia de ejecuta 10 o 1000 veces. Según mi criterio, esta es la mejor fuente de información a la hora de indexar una instancia SQL Server administrada, ya que se crean los índices que realmente se demuestran como necesarios.

Aunque existen muchas sentencias de este tipo de similares características, esta sería una que se puede emplear para SQL Server 2005 y siguientes:

 

select d.statement as fully_qualified_object, user_seeks, avg_user_impact, equality_columns, d.inequality_columns, d.included_columns,
create_index = replace(‘create nonclustered index IX_’ + object_name(d.object_id, d.database_id) +’_A# on ‘ +
object_name(d.object_id, d.database_id) + ‘ (‘ + isnull(d.equality_columns + ‘,’, ”) + isnull(d.inequality_columns, ”) + ‘) ‘ + isnull(‘include (‘ + d.included_columns + ‘)’, ”) + ‘ with(online = on)’
, ‘,)’, ‘)’)
, d.database_id, d.object_id, d.index_handle
–, gs.*
from sys.dm_db_missing_index_groups g
join sys.dm_db_missing_index_group_stats gs on gs.group_handle = g.index_group_handle
join sys.dm_db_missing_index_details d on g.index_handle = d.index_handle
where user_seeks > 100
order by gs.user_seeks desc

 

La propia sentencia te da el script “create index” necesario (que habrá que renombrar), con la partícula “with (online=on)”, valido sólo para alguna ediciones de SQL Server. De forma muy resumida, lo que se obtiene son aquellos índices que mejorarían sentencias que se han lanzado más de 100 veces, indicando los campos que se consultan con igualdad, con desigualdad (como con un “>=”), los campos included, así como las veces que se anotó y el impacto que se le supone, ordenado por el número de ocurrencias de forma descendente. Es lo mismo que cuando se expone de forma gráfica un plan de ejecución en Management Studio y aparecen en verde un índice que se sugiere para mejorar la consulta.

Así, si se observa que esta consulta devuelve que la creación de un índice mejoraría en un 70% una sentencia que se ha ejecutado (desde el último reinicio del servidor, dato importante) unas 20.000 veces, puede uno plantearse la creación de dicho índice. Luego hay que evaluar también los campos que irían en el índice, su tamaño y el tamaño de la tabla, no sea que nos esté sugiriendo crear un índice con decenas de campos de gran tamaño.

Deja un comentario


Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies