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
 

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

Preguntas similares