Mejorar Desempeño en Procedimiento almacenado

29/09/2005 - 23:20 por Diego M R®mero | Informe spam
Hola
Tengo un problama , a ver si me pueden dar alguna idea para solucionarlo:

La tabla Trn_Vencimientos , es donde estan los registros de los cargos que
se le hacen por cada vehículo, aquí se agregan mas o menos 300 registros por
mes.

La tabla Trn_RecFactura, es donde se agregan los registros ( recibos de
caja) que cancelan cada registro de Trn_Vencimientos (cargos).

El siguiente procedimiento actualiza el campo de total abonado por cada
registro de Trn_Vencimientos , sumando los registros de Trn_RecFactura, de
un vehículo
Pero aquí se demora, mas o menos 3 minutos ,solo con 5 meses de movimiento,
es decir 1500 registros.


CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo VARCHAR(10)
AS
UPDATE Trn_Vencimientos SET Trn_Vencimientos.ValorAbono=(SELECT
ISNULL(SUM(Trn_RecFactura.ValorAbono-Trn_RecFactura.Devolucion),0)
FROM Trn_RecFactura WHERE Trn_Vencimientos.TipDoc=Trn_RecFactura.TipDoc AND
Trn_Vencimientos.Documento =Trn_RecFactura.Documento
AND Trn_Vencimientos.IdCia=Trn_RecFactura.IdCiaDoc AND
Trn_Vencimientos.Item=Trn_RecFactura.ItemDoc)
FROM Trn_Vencimientos INNER JOIN Vehiculos ON
Trn_Vencimientos.IdVehiculo=Vehiculos.IdVehiculo
WHERE Trn_Vencimientos.IdVehiculo=@pmIdVehiculo

Agradezco su colaboración



Diego
 

Leer las respuestas

#1 Alejandro Mesa
29/09/2005 - 23:27 | Informe spam
Diego,

Por que relacionas las tablas Trn_Vencimientos y Vehiculos, si en ningun
momento haces referencia a alguna columna de la tabla Vehiculos?

CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo VARCHAR(10)
AS
UPDATE
Trn_Vencimientos
SET
Trn_Vencimientos.ValorAbono = (
SELECT
ISNULL(SUM(Trn_RecFactura.ValorAbono-Trn_RecFactura.Devolucion),0)
FROM
Trn_RecFactura
WHERE
Trn_Vencimientos.TipDoc = Trn_RecFactura.TipDoc
AND Trn_Vencimientos.Documento = Trn_RecFactura.Documento
AND Trn_Vencimientos.IdCia = Trn_RecFactura.IdCiaDoc
AND Trn_Vencimientos.Item = Trn_RecFactura.ItemDoc
)


WHERE
Trn_Vencimientos.IdVehiculo = @pmIdVehiculo


AMB

"Diego M R®mero" wrote:

Hola
Tengo un problama , a ver si me pueden dar alguna idea para solucionarlo:

La tabla Trn_Vencimientos , es donde estan los registros de los cargos que
se le hacen por cada vehículo, aquí se agregan mas o menos 300 registros por
mes.

La tabla Trn_RecFactura, es donde se agregan los registros ( recibos de
caja) que cancelan cada registro de Trn_Vencimientos (cargos).

El siguiente procedimiento actualiza el campo de total abonado por cada
registro de Trn_Vencimientos , sumando los registros de Trn_RecFactura, de
un vehículo
Pero aquí se demora, mas o menos 3 minutos ,solo con 5 meses de movimiento,
es decir 1500 registros.


CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo VARCHAR(10)
AS
UPDATE Trn_Vencimientos SET Trn_Vencimientos.ValorAbono=(SELECT
ISNULL(SUM(Trn_RecFactura.ValorAbono-Trn_RecFactura.Devolucion),0)
FROM Trn_RecFactura WHERE Trn_Vencimientos.TipDoc=Trn_RecFactura.TipDoc AND
Trn_Vencimientos.Documento =Trn_RecFactura.Documento
AND Trn_Vencimientos.IdCia=Trn_RecFactura.IdCiaDoc AND
Trn_Vencimientos.Item=Trn_RecFactura.ItemDoc)
FROM Trn_Vencimientos INNER JOIN Vehiculos ON
Trn_Vencimientos.IdVehiculo=Vehiculos.IdVehiculo
WHERE Trn_Vencimientos.IdVehiculo=@pmIdVehiculo

Agradezco su colaboración



Diego




Preguntas similares