Rendimientos y planes de ejecucion

08/01/2007 - 10:06 por Ismael | Informe spam
Volviendo al tema del viernes sobre planes de ejecución. Supongamos que tengo
una vista como la siguiente:

SELECT
a.IdEjecutoria,
a.IdMedida,
a.Id [IdInforme],
CONVERT(char,a.FElaboracion,103) [FElaboracion],
a.IDEjecutoria,
c.Descripcion [TipoInforme]
FROM
dbo.EMJInformes as a LEFT JOIN dbo.AuxTipoInforme as c ON
a.IdTipoInforme=c.Id
WHERE
a.Id = (
SELECT TOP 1
b.Id
FROM
dbo.EMJInformes as b
WHERE
b.IDEjecutoria = a.IDEjecutoria
ORDER BY
b.FElaboracion DESC
)


la cual me saca el siguiente plan de ejecución:

1) SELECT Costo:0%
2) Compute Scalar Costo: 0%
3) Nested Loops / Left Outer Join Costo: 0%
4)
4a)
4a.1) Filter Costo: 0%
4a.2) Nested Loops / Inner Join Costo: 0%
4a.3)
4a.3a)
4a.3a.1) EMJInformes.PK_ Clustered Index Scan
4a.3b)
4a.3a.1) Hash Match/Cache
4a.3a.2) Compute Scalar Costo: 0%
4a.3a.3) Sort/TopN Sort Costo: 86%
4a.3a.4) Index Spool/Eager Spool: Costo: 0%
4a.3a.5) EMJInformes.PK_... Costo: 114%
4b)
4b.1) AuxTipoInforme Clustered Index Seek Costo: 43%


(espero haber explicado bien el gráfico) ¿Como debería de interpretar ese
gráfico? ¿Cómo sé que partes debo y se pueden mejorar y cuales me está dando
un resultado óptimo? La tabla "a" tiene 4000 registros aproximadamente y van
en crecimiento, la "c" tiene 13 registros que son siempre los mismos. Gracias

Ismael

Preguntas similare

Leer las respuestas

#1 Maxi
08/01/2007 - 12:37 | Informe spam
Ismael, en los planes tienes el costo total del mismo con lo cual puedes
hacer comparatibas entre unos y otros.
Lo que miraria yo en los planes basicamente es:

1) Que no haya table Scan
2) Que no haya Cluster index Scan
3) La cantidad de lecturas


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Ismael" escribió en el mensaje
news:
Volviendo al tema del viernes sobre planes de ejecución. Supongamos que
tengo
una vista como la siguiente:

SELECT
a.IdEjecutoria,
a.IdMedida,
a.Id [IdInforme],
CONVERT(char,a.FElaboracion,103) [FElaboracion],
a.IDEjecutoria,
c.Descripcion [TipoInforme]
FROM
dbo.EMJInformes as a LEFT JOIN dbo.AuxTipoInforme as c ON
a.IdTipoInforme=c.Id
WHERE
a.Id = (
SELECT TOP 1
b.Id
FROM
dbo.EMJInformes as b
WHERE
b.IDEjecutoria = a.IDEjecutoria
ORDER BY
b.FElaboracion DESC
)


la cual me saca el siguiente plan de ejecución:

1) SELECT Costo:0%
2) Compute Scalar Costo: 0%
3) Nested Loops / Left Outer Join Costo: 0%
4)
4a)
4a.1) Filter Costo: 0%
4a.2) Nested Loops / Inner Join Costo: 0%
4a.3)
4a.3a)
4a.3a.1) EMJInformes.PK_ Clustered Index Scan
4a.3b)
4a.3a.1) Hash Match/Cache
4a.3a.2) Compute Scalar Costo: 0%
4a.3a.3) Sort/TopN Sort Costo: 86%
4a.3a.4) Index Spool/Eager Spool: Costo: 0%
4a.3a.5) EMJInformes.PK_... Costo: 114%
4b)
4b.1) AuxTipoInforme Clustered Index Seek Costo: 43%


(espero haber explicado bien el gráfico) ¿Como debería de interpretar ese
gráfico? ¿Cómo sé que partes debo y se pueden mejorar y cuales me está
dando
un resultado óptimo? La tabla "a" tiene 4000 registros aproximadamente y
van
en crecimiento, la "c" tiene 13 registros que son siempre los mismos.
Gracias

Ismael
Respuesta Responder a este mensaje
#2 Jose Mariano Alvarez
08/01/2007 - 16:59 | Informe spam
Para obtener el plan en modo texto puedes usar: SET SHOWPLAN_ALL ON o SET
SHOWPLAN_TEXT ON

Suponiendo que ID sea PK de la tabla EMJInformes, para reducir tu query
podrias probar con un "cover index" por las columnas IDEjecutoria y
FElaboracion (en ese orden).
Si ID no es PK podrias agregarlo como tercer nivel del indice que te sugeri.




Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




"Ismael" wrote in message
news:
Volviendo al tema del viernes sobre planes de ejecución. Supongamos que
tengo
una vista como la siguiente:

SELECT
a.IdEjecutoria,
a.IdMedida,
a.Id [IdInforme],
CONVERT(char,a.FElaboracion,103) [FElaboracion],
a.IDEjecutoria,
c.Descripcion [TipoInforme]
FROM
dbo.EMJInformes as a LEFT JOIN dbo.AuxTipoInforme as c ON
a.IdTipoInforme=c.Id
WHERE
a.Id = (
SELECT TOP 1
b.Id
FROM
dbo.EMJInformes as b
WHERE
b.IDEjecutoria = a.IDEjecutoria
ORDER BY
b.FElaboracion DESC
)


la cual me saca el siguiente plan de ejecución:

1) SELECT Costo:0%
2) Compute Scalar Costo: 0%
3) Nested Loops / Left Outer Join Costo: 0%
4)
4a)
4a.1) Filter Costo: 0%
4a.2) Nested Loops / Inner Join Costo: 0%
4a.3)
4a.3a)
4a.3a.1) EMJInformes.PK_ Clustered Index Scan
4a.3b)
4a.3a.1) Hash Match/Cache
4a.3a.2) Compute Scalar Costo: 0%
4a.3a.3) Sort/TopN Sort Costo: 86%
4a.3a.4) Index Spool/Eager Spool: Costo: 0%
4a.3a.5) EMJInformes.PK_... Costo: 114%
4b)
4b.1) AuxTipoInforme Clustered Index Seek Costo: 43%


(espero haber explicado bien el gráfico) ¿Como debería de interpretar ese
gráfico? ¿Cómo sé que partes debo y se pueden mejorar y cuales me está
dando
un resultado óptimo? La tabla "a" tiene 4000 registros aproximadamente y
van
en crecimiento, la "c" tiene 13 registros que son siempre los mismos.
Gracias

Ismael
Respuesta Responder a este mensaje
#3 Javier Loria
09/01/2007 - 13:52 | Informe spam
Hola Ismael:
Paralelo a tu consulta de planes de ejecucion (que asumo estas tratando
de optimizar la consulta) porque no pruebas:
SELECT
a.IdEjecutoria,
a.IdMedida,
a.Id [IdInforme],
CONVERT(char,a.FElaboracion,103) [FElaboracion],
a.IDEjecutoria,
c.Descripcion [TipoInforme]
FROM
dbo.EMJInformes as a
LEFT JOIN dbo.AuxTipoInforme as c
ON
a.IdTipoInforme=c.Id
JOIN (SELECT IDEjecutoria
, MAX(Id)
FROM FROM dbo.EMJInformes) AS c
ON a.IDEjecutoria=c.IDEjecturia
Saludos,


Javier Loria
Costa Rica-MVP
Solid Quality Learning

"Ismael" wrote in message
news:
Volviendo al tema del viernes sobre planes de ejecución. Supongamos que
tengo
una vista como la siguiente:

SELECT
a.IdEjecutoria,
a.IdMedida,
a.Id [IdInforme],
CONVERT(char,a.FElaboracion,103) [FElaboracion],
a.IDEjecutoria,
c.Descripcion [TipoInforme]
FROM
dbo.EMJInformes as a LEFT JOIN dbo.AuxTipoInforme as c ON
a.IdTipoInforme=c.Id
WHERE
a.Id = (
SELECT TOP 1
b.Id
FROM
dbo.EMJInformes as b
WHERE
b.IDEjecutoria = a.IDEjecutoria
ORDER BY
b.FElaboracion DESC
)


la cual me saca el siguiente plan de ejecución:

1) SELECT Costo:0%
2) Compute Scalar Costo: 0%
3) Nested Loops / Left Outer Join Costo: 0%
4)
4a)
4a.1) Filter Costo: 0%
4a.2) Nested Loops / Inner Join Costo: 0%
4a.3)
4a.3a)
4a.3a.1) EMJInformes.PK_ Clustered Index Scan
4a.3b)
4a.3a.1) Hash Match/Cache
4a.3a.2) Compute Scalar Costo: 0%
4a.3a.3) Sort/TopN Sort Costo: 86%
4a.3a.4) Index Spool/Eager Spool: Costo: 0%
4a.3a.5) EMJInformes.PK_... Costo: 114%
4b)
4b.1) AuxTipoInforme Clustered Index Seek Costo: 43%


(espero haber explicado bien el gráfico) ¿Como debería de interpretar ese
gráfico? ¿Cómo sé que partes debo y se pueden mejorar y cuales me está
dando
un resultado óptimo? La tabla "a" tiene 4000 registros aproximadamente y
van
en crecimiento, la "c" tiene 13 registros que son siempre los mismos.
Gracias

Ismael
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida