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

Preguntas similare

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




Respuesta Responder a este mensaje
#2 Diego M R®mero
30/09/2005 - 15:42 | Informe spam
Alejando:
Le agradezco por haberme respondido.

Ejecute el proc. como usted me lo envio y sigue igual, se demora los mismos
3 minutos

Como es posible que para devolver 23 filas con el siguiente procedimiento se
demore mas de 20 segundos,
claro esta que solo devuelve las que cumplan la condición, pero del vehículo
hay 900 registros actualmente.

Asi lo ejecuto en el analizador de consultas:

paQryVencimientosLta Null,Null,Null,Null,'SDD546'


CREATE PROCEDURE paQryVencimientosLta @pmTipDoc VARCHAR(3),@pmIdCia
CHAR(2),@pmIdClase VARCHAR(4),@pmIdCliente VARCHAR(11),@pmIdVehiculo
VARCHAR(10)

AS
SELECT TipDoc, Documento, IdCia, Item,ValorFactura-ValorAbono AS
ValorSaldo,ValorFactura,ValorAbono,FecEmision,FecVence,
IdCliente,T.RazonSocial AS NomCliente,IdAgencia,
IdVehiculo,VehPropio,IdVendedor,C.RazonSocial AS Conductor
,V.IdCargo AS IdCarg,Concepto,V.IdClase AS CodClase,ClaseCuenta,Factura,
Referencia, Detalle,TipRec, Recibo, IdCiaRec,ValorAtcpo
FROM Trn_Vencimientos AS V INNER JOIN Terceros AS T ON
V.IdCliente=T.IdTercero
INNER JOIN ClaseCue AS U ON V.IdClase=U.IdClase
LEFT JOIN Terceros AS C ON V.IdVendedor=C.IdTercero
LEFT JOIN Fijos AS F ON V.IdCargo=F.IdCargo
WHERE (ValorFactura-ValorAbono)>0 AND TipDoc=ISNULL(@pmTipDoc,TipDoc) AND
IdCia=ISNULL(@pmIdCia,IdCia) AND V.IdClase=ISNULL(@pmIdClase ,V.IdClase)
AND IdCliente=ISNULL(@pmIdCliente,IdCliente)
AND IdVehiculo=ISNULL(@pmIdVehiculo,IdVehiculo)
ORDER BY Prioridad,FecVence,TipDoc,IdCia,Documento,Item

¿ Que estoy haciendo mal ? o ¿será por el volumen de registros ?

Espero me pueda ayudar

Diego

"Alejandro Mesa" escribió en el
mensaje news:
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
>
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida