Introducción
A las tareas habituales de cualquier DBA, existe una que nos debe ocupar nuestro poco tiempo libre: Investigar.
En mi caso, la investigación la concentro en nuevas herramientas que faciliten nuestro trabajo o, mejor aún, que los resultados obtenidos puedan ser aplicados con el objetivo de mejorar cualquiera de las actividades que involucran la tarea de DBA.
Con esa idea comencé a analizar SQL 2005 Beta 3, preguntándome: Las herramientas como Database Tuning Advisor(DTA), podrían mejorar la elección de los índices sobre una Base de Datos de SQL 2000?
Para responderme esta pregunta me basé en una Base de Datos de un cliente real, es decir no me pareció adecuado generar una base de prueba, sino por el contrario utilizar una de las bases que actualmente estoy optimizando.
Para comenzar tome una consulta de la aplicación real utilizada por el cliente capturándola con el Profiler de SQL 2000.
Análisis Utilizando Index Tuning Wizard(ITW)
La consulta es:
SELECT DISTINCT t.fecha AS c0,
c.prefijoext AS c1,
c.numeroext AS c2,
c.talonario AS c3
FROM Transac t (nolock)
join cmpasociados c (nolock)
on t.nrotrans = c.nrotrans
join tiposcmp ti (nolock)
on c.codcmp = ti.codcmp
join talonarios tal (nolock)
on c.talonario = tal.talonario
and t.codemp = tal.codemp
WHERE T.Nrotranselim is null
AND (CASE WHEN T.Codcmp in (‘CA’, ‘CC’, ‘CB’, ‘CE’, ‘LR’, ‘LO’, ‘LP’, ‘CZ’, ‘VA’,
‘VB’, ‘VC’, ‘VE’, ‘VZ’) THEN T.Nrotransaut
WHEN T.Codcmp in (‘IE’, ‘EE’, ‘RD’) THEN T.Nrotransctrl
ELSE T.Nrotrans END) is not null
AND (t.CodEmp is null
or t.codemp = 1)
AND c.talonario = 25
AND t.codsuc = 1
ORDER BY c2 DESC
Esta consulta copiada al Query Analyzer genera el siguiente plan de ejecución:
Las estadísticas de la ejecución de la consulta mostraron los siguientes valores:
170259 row(s) affected)
Table ‘TRANSAC’. Scan count 1, logical reads 31004, physical reads 1065, read-ahead reads 29512.
Table ‘CMPASOCIADOS’. Scan count 1, logical reads 8482, physical reads 0, read-ahead reads 4393.
Table ‘TIPOSCMP’. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 2.
Table ‘TALONARIOS’. Scan count 1, logical reads 2, physical reads 2, read-ahead reads 0.