Cual es el mas eficiente Top ó ROWCOUNT

12/05/2009 - 23:14 por jmauriciopb | Informe spam
Buen dia.

Los dos SP me dan el mismo resultado, pero quisiera saber cual es el
mas optimo.

El objetivo es los SP es recuperar los datos todos los empleados que
trabaja en la maquina a la que se le asigno el ultimo egreso de un
determinado item.

ALTER Procedure dbo.spC_EmpleadoMaquinaTroqueladoraPrb @tiIdMovTip
Int, @tiItemId int
As
Select Empleado.iEmpleadoId, Empleado.cNameSmall
From Empleado
Inner Join MaquinaEmpleado ON Empleado.iEmpleadoId MaquinaEmpleado.iIdEmpleado
Inner Join (Select Top 1 Inv_MovC.iIdMaquina
From Inv_MovC
Inner Join Inv_MovD On Inv_MovC.iMovCId = Inv_MovD.iIdMovC
Inner Join Inv_ItemStock On Inv_MovD.iIdItemStock Inv_ItemStock.iItemStockId
Inner Join Inv_Item On Inv_ItemStock.iIdItem Inv_Item.iItemId
Where Inv_MovC.iIdMovTip = @tiIdMovTip --Egreso de troqueles
And Inv_Item.iItemId = @tiItemId
Order By Inv_MovC.iMovCId desc
) As t On MaquinaEmpleado.iIdMaquina = t.iIdMaquina


ALTER Procedure dbo.spC_EmpleadoMaquinaTroqueladoraPrb1 @tiIdMovTip
Int, @tiItemId int
As
Declare @tiMachineKey Int

SET ROWCOUNT 1

Select @tiMachineKey = Inv_MovC.iIdMaquina
From Inv_MovC
Inner Join Inv_MovD On Inv_MovC.iMovCId = Inv_MovD.iIdMovC
Inner Join Inv_ItemStock On Inv_MovD.iIdItemStock Inv_ItemStock.iItemStockId
Inner Join Inv_Item On Inv_ItemStock.iIdItem = Inv_Item.iItemId
Where Inv_MovC.iIdMovTip = @tiIdMovTip --Egreso de troqueles
And Inv_Item.iItemId = @tiItemId
Order By Inv_MovC.iMovCId desc

SET ROWCOUNT 0

Select Empleado.iEmpleadoId, Empleado.cNameSmall
From Empleado
Inner Join MaquinaEmpleado ON Empleado.iEmpleadoId MaquinaEmpleado.iIdEmpleado
Where MaquinaEmpleado.iIdMaquina = @tiMachineKey



Espero sus comentarios.

Saludos.
Mauricio Pulla.
Cuenca-Ecuador

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
13/05/2009 - 02:07 | Informe spam
Es lo mismo. Puedes leer en los BOL que si el valor de rowcount es menor,
entonces este sobre-escribe el valor en el "top".

AMB



"" wrote:

Buen dia.

Los dos SP me dan el mismo resultado, pero quisiera saber cual es el
mas optimo.

El objetivo es los SP es recuperar los datos todos los empleados que
trabaja en la maquina a la que se le asigno el ultimo egreso de un
determinado item.

ALTER Procedure dbo.spC_EmpleadoMaquinaTroqueladoraPrb @tiIdMovTip
Int, @tiItemId int
As
Select Empleado.iEmpleadoId, Empleado.cNameSmall
From Empleado
Inner Join MaquinaEmpleado ON Empleado.iEmpleadoId > MaquinaEmpleado.iIdEmpleado
Inner Join (Select Top 1 Inv_MovC.iIdMaquina
From Inv_MovC
Inner Join Inv_MovD On Inv_MovC.iMovCId = Inv_MovD.iIdMovC
Inner Join Inv_ItemStock On Inv_MovD.iIdItemStock > Inv_ItemStock.iItemStockId
Inner Join Inv_Item On Inv_ItemStock.iIdItem > Inv_Item.iItemId
Where Inv_MovC.iIdMovTip = @tiIdMovTip --Egreso de troqueles
And Inv_Item.iItemId = @tiItemId
Order By Inv_MovC.iMovCId desc
) As t On MaquinaEmpleado.iIdMaquina = t.iIdMaquina


ALTER Procedure dbo.spC_EmpleadoMaquinaTroqueladoraPrb1 @tiIdMovTip
Int, @tiItemId int
As
Declare @tiMachineKey Int

SET ROWCOUNT 1

Select @tiMachineKey = Inv_MovC.iIdMaquina
From Inv_MovC
Inner Join Inv_MovD On Inv_MovC.iMovCId = Inv_MovD.iIdMovC
Inner Join Inv_ItemStock On Inv_MovD.iIdItemStock > Inv_ItemStock.iItemStockId
Inner Join Inv_Item On Inv_ItemStock.iIdItem = Inv_Item.iItemId
Where Inv_MovC.iIdMovTip = @tiIdMovTip --Egreso de troqueles
And Inv_Item.iItemId = @tiItemId
Order By Inv_MovC.iMovCId desc

SET ROWCOUNT 0

Select Empleado.iEmpleadoId, Empleado.cNameSmall
From Empleado
Inner Join MaquinaEmpleado ON Empleado.iEmpleadoId > MaquinaEmpleado.iIdEmpleado
Where MaquinaEmpleado.iIdMaquina = @tiMachineKey



Espero sus comentarios.

Saludos.
Mauricio Pulla.
Cuenca-Ecuador

Respuesta Responder a este mensaje
#2 jmauriciopb
13/05/2009 - 14:30 | Informe spam
Gracias Alejandro.

Lei los BOL, pero no me quedo muy claro en los planes de ejecucion hay
diferencia por eso mi pregunta.

Nuevamente gracias.

Saludos.
Mauricio Pulla
Cuenca-Ecuador
Respuesta Responder a este mensaje
#3 Alejandro Mesa
13/05/2009 - 14:51 | Informe spam
Puedes postear los planes e indicar el costo de cada uno respecto al batch?


AMB

"" wrote:


Gracias Alejandro.

Lei los BOL, pero no me quedo muy claro en los planes de ejecucion hay
diferencia por eso mi pregunta.

Nuevamente gracias.

Saludos.
Mauricio Pulla
Cuenca-Ecuador

Respuesta Responder a este mensaje
#4 jmauriciopb
14/05/2009 - 16:09 | Informe spam
Hola Alejandro.

Nuevamente gracias por tu tiempo, estos son los resultados.

Ejecuto los 2 SP en el analizador de consultas a la vez y los costos
por lotes son

SP con SET ROWCOUNT 1 como son 2 consultas me dan los siguientes
resultados. 50.92 (38.45 + 12.47)

SP con TOP 1 el costo de la consulta por lote es de 49.08

Aquí si me vas a disculpar no sé cómo hacerlo, existe alguna manera de
enviar a texto o archivo los planes de ejecución o simplemente se los
transcribe.

Estoy trabajando con SS 2000 SP 4

Saludos.
Mauricio 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