Como interpretar el pla de ejecución

02/02/2006 - 22:33 por Mauricio Pulla | Informe spam
Hola.

Tengo 2 Sql que me devuelven el mismo resultado, pero quisiera saber cual es
el mas optimo no se interpretar el plan de ejcucion me recomiendan algun
link donde puedo encontrar información.

1-
Select Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
Empleado.nActivo, Empleado.iIdRol,
Empleado.iIdCentroCosto, Con_Cuenta.cNombre As cCCostoName,
Con_Cuenta.cCtaId, Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja,
IsNull((Select Sum(VacacionLiqC.nDiasTotal) From VacacionLiqC Where
VacacionLiqC.iIdEmpleado = Empleado.iEmpleadoId Group By iIdEmpleado), 0) AS
nDiasTomados
From Empleado Inner Join Nom_AltaBaja On Empleado.iIdAltaBaja Nom_AltaBaja.iAltaBajaId Inner Join Con_Cuenta ON Empleado.iIdCentroCosto Con_Cuenta.iCtaId
Order by cApellidos, cNombres

2.-
Select Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
Empleado.nActivo, Empleado.iIdRol,
Empleado.iIdCentroCosto, Con_Cuenta.cNombre As cCCostoName,
Con_Cuenta.cCtaId, Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja,
Isnull(Sum(VacacionLiqC.nDiasTotal), 0) AS nDiasTomados
From Empleado Inner Join Nom_AltaBaja On Empleado.iIdAltaBaja Nom_AltaBaja.iAltaBajaId
Inner Join Con_Cuenta ON Empleado.iIdCentroCosto = Con_Cuenta.iCtaId
Left join VacacionLiqC On VacacionLiqC.iIdEmpleado Empleado.iEmpleadoId
Group By Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
Empleado.nActivo, Empleado.iIdRol,
Empleado.iIdCentroCosto, Con_Cuenta.cNombre, Con_Cuenta.cCtaId,
Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja
Order by cApellidos, cNombres

Saludos.
Muaricio Pulla.
Cuenca-Ecuador

Preguntas similare

Leer las respuestas

#1 Guillermo Roldan
03/02/2006 - 12:30 | Informe spam
Hola Mauricio,

Yo no soy muy bueno interpretando planes de ejecución, pero hay algunas
cosas que siempre hay que fijarse, principalmente, si se realiza un FULL
TABLE SCAN de la tabla, o si por el contrario se accede a la tabla por un
índice, ya sea mediante FULL INDEX SCAN o SEEK INDEX.

Lo que yo suelo buscar, es evitar los FULL SCAN de tabla y a poder ser,
también de índice.

De cualquier modo, con la información que nos has pasado poco podemos hacer,
ya que ni sabemos como está desarrollada la indexación de tus tablas, ni
sabemos el plan de ejecución, etc.

No obstante, a priori me gusta más la primera de las consultas, ya que no
utiliza GROUP BY (los ORDER BY y GROUP BY penalizan, salvo en algunos casos
que coincididan con un índice clustered).

No sé si te seré de ayuda, pero por aquí hay más gente que sabe más de esto
que yo.

Saludos,
Guillermo

"Mauricio Pulla" wrote:

Hola.

Tengo 2 Sql que me devuelven el mismo resultado, pero quisiera saber cual es
el mas optimo no se interpretar el plan de ejcucion me recomiendan algun
link donde puedo encontrar información.

1-
Select Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
Empleado.nActivo, Empleado.iIdRol,
Empleado.iIdCentroCosto, Con_Cuenta.cNombre As cCCostoName,
Con_Cuenta.cCtaId, Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja,
IsNull((Select Sum(VacacionLiqC.nDiasTotal) From VacacionLiqC Where
VacacionLiqC.iIdEmpleado = Empleado.iEmpleadoId Group By iIdEmpleado), 0) AS
nDiasTomados
From Empleado Inner Join Nom_AltaBaja On Empleado.iIdAltaBaja > Nom_AltaBaja.iAltaBajaId Inner Join Con_Cuenta ON Empleado.iIdCentroCosto > Con_Cuenta.iCtaId
Order by cApellidos, cNombres

2.-
Select Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
Empleado.nActivo, Empleado.iIdRol,
Empleado.iIdCentroCosto, Con_Cuenta.cNombre As cCCostoName,
Con_Cuenta.cCtaId, Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja,
Isnull(Sum(VacacionLiqC.nDiasTotal), 0) AS nDiasTomados
From Empleado Inner Join Nom_AltaBaja On Empleado.iIdAltaBaja > Nom_AltaBaja.iAltaBajaId
Inner Join Con_Cuenta ON Empleado.iIdCentroCosto = Con_Cuenta.iCtaId
Left join VacacionLiqC On VacacionLiqC.iIdEmpleado > Empleado.iEmpleadoId
Group By Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
Empleado.nActivo, Empleado.iIdRol,
Empleado.iIdCentroCosto, Con_Cuenta.cNombre, Con_Cuenta.cCtaId,
Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja
Order by cApellidos, cNombres

Saludos.
Muaricio Pulla.
Cuenca-Ecuador



Respuesta Responder a este mensaje
#2 Mauricio Pulla
03/02/2006 - 14:37 | Informe spam
Ok. Gillermo.

Muy agradecido por tu aporte.

Saludos.
Mauricio Pulla.
Cuenca-Ecuador


"Guillermo Roldan" escribió en
el mensaje news:
Hola Mauricio,

Yo no soy muy bueno interpretando planes de ejecución, pero hay algunas
cosas que siempre hay que fijarse, principalmente, si se realiza un FULL
TABLE SCAN de la tabla, o si por el contrario se accede a la tabla por un
índice, ya sea mediante FULL INDEX SCAN o SEEK INDEX.

Lo que yo suelo buscar, es evitar los FULL SCAN de tabla y a poder ser,
también de índice.

De cualquier modo, con la información que nos has pasado poco podemos


hacer,
ya que ni sabemos como está desarrollada la indexación de tus tablas, ni
sabemos el plan de ejecución, etc.

No obstante, a priori me gusta más la primera de las consultas, ya que no
utiliza GROUP BY (los ORDER BY y GROUP BY penalizan, salvo en algunos


casos
que coincididan con un índice clustered).

No sé si te seré de ayuda, pero por aquí hay más gente que sabe más de


esto
que yo.

Saludos,
Guillermo

"Mauricio Pulla" wrote:

> Hola.
>
> Tengo 2 Sql que me devuelven el mismo resultado, pero quisiera saber


cual es
> el mas optimo no se interpretar el plan de ejcucion me recomiendan algun
> link donde puedo encontrar información.
>
> 1-
> Select Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
> Empleado.nActivo, Empleado.iIdRol,
> Empleado.iIdCentroCosto, Con_Cuenta.cNombre As cCCostoName,
> Con_Cuenta.cCtaId, Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja,
> IsNull((Select Sum(VacacionLiqC.nDiasTotal) From VacacionLiqC


Where
> VacacionLiqC.iIdEmpleado = Empleado.iEmpleadoId Group By iIdEmpleado),


0) AS
> nDiasTomados
> From Empleado Inner Join Nom_AltaBaja On Empleado.iIdAltaBaja > > Nom_AltaBaja.iAltaBajaId Inner Join Con_Cuenta ON


Empleado.iIdCentroCosto > > Con_Cuenta.iCtaId
> Order by cApellidos, cNombres
>
> 2.-
> Select Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
> Empleado.nActivo, Empleado.iIdRol,
> Empleado.iIdCentroCosto, Con_Cuenta.cNombre As cCCostoName,
> Con_Cuenta.cCtaId, Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja,
> Isnull(Sum(VacacionLiqC.nDiasTotal), 0) AS nDiasTomados
> From Empleado Inner Join Nom_AltaBaja On Empleado.iIdAltaBaja > > Nom_AltaBaja.iAltaBajaId
> Inner Join Con_Cuenta ON Empleado.iIdCentroCosto Con_Cuenta.iCtaId
> Left join VacacionLiqC On VacacionLiqC.iIdEmpleado > > Empleado.iEmpleadoId
> Group By Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
> Empleado.nActivo, Empleado.iIdRol,
> Empleado.iIdCentroCosto, Con_Cuenta.cNombre, Con_Cuenta.cCtaId,
> Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja
> Order by cApellidos, cNombres
>
> Saludos.
> Muaricio Pulla.
> Cuenca-Ecuador
>
>
>
Respuesta Responder a este mensaje
#3 Gustavo Larriera [MVP]
03/02/2006 - 15:53 | Informe spam
Si buscas en la web vas a encontrar mucha información. Por ejemplo:

SQL Tuning Tutorial - Understanding a Database Execution Plan (1)
By Gael Fraiteur

http://www.codeproject.com/cs/datab...rial-1.asp

Gustavo Larriera
Uruguay LatAm
Blog: http://sqljunkies.com/weblog/gux/
MVP profile: http://aspnet2.com/mvp.ashx?GustavoLarriera
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.

"Mauricio Pulla" wrote in message
news:
Hola.

Tengo 2 Sql que me devuelven el mismo resultado, pero quisiera saber cual
es
el mas optimo no se interpretar el plan de ejcucion me recomiendan algun
link donde puedo encontrar información.

1-
Select Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
Empleado.nActivo, Empleado.iIdRol,
Empleado.iIdCentroCosto, Con_Cuenta.cNombre As cCCostoName,
Con_Cuenta.cCtaId, Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja,
IsNull((Select Sum(VacacionLiqC.nDiasTotal) From VacacionLiqC Where
VacacionLiqC.iIdEmpleado = Empleado.iEmpleadoId Group By iIdEmpleado), 0)
AS
nDiasTomados
From Empleado Inner Join Nom_AltaBaja On Empleado.iIdAltaBaja > Nom_AltaBaja.iAltaBajaId Inner Join Con_Cuenta ON Empleado.iIdCentroCosto
> Con_Cuenta.iCtaId
Order by cApellidos, cNombres

2.-
Select Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
Empleado.nActivo, Empleado.iIdRol,
Empleado.iIdCentroCosto, Con_Cuenta.cNombre As cCCostoName,
Con_Cuenta.cCtaId, Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja,
Isnull(Sum(VacacionLiqC.nDiasTotal), 0) AS nDiasTomados
From Empleado Inner Join Nom_AltaBaja On Empleado.iIdAltaBaja > Nom_AltaBaja.iAltaBajaId
Inner Join Con_Cuenta ON Empleado.iIdCentroCosto = Con_Cuenta.iCtaId
Left join VacacionLiqC On VacacionLiqC.iIdEmpleado > Empleado.iEmpleadoId
Group By Empleado.iEmpleadoId, Empleado.cApellidos, Empleado.cNombres,
Empleado.nActivo, Empleado.iIdRol,
Empleado.iIdCentroCosto, Con_Cuenta.cNombre, Con_Cuenta.cCtaId,
Nom_AltaBaja.tAlta, Nom_AltaBaja.tBaja
Order by cApellidos, cNombres

Saludos.
Muaricio Pulla.
Cuenca-Ecuador


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