¿ Como hago para mejorar Procedimiento ?

21/10/2005 - 16:30 por Diego M R®mero | Informe spam
Hola

No he podido mejorar este procedimiento; ya le cree indices a todos los
campos que utiliza la clausula WHERE
,se cambie el operador ( = ) por LIKE.

En la tabla Trn_Vencimientos hay mas o menos 250000 registros, y en
Trn_RecFactura hay unos 200000.

Al ejecutar el procedimiento así:
paUpVencimientosApl 'SDD038'
Se está demorando 30 segundos, actualizando mas o menos 800 registro del
vehículo 'SDD038'

¿ Que puedo hacer para reducir el tiempo de ejecución ?

Agradezco su colaboración.

= procedimiento almacenado
CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni SMALLDATETIME=Null,@pmFechaFin
SMALLDATETIME=Null
AS
IF ISDATE(@pmFechaIni)>0 AND ISDATE(@pmFechaFin)>0--POR FECHA
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 FecEmision BETWEEN @pmFechaIni AND @pmFechaFin
AND Trn_Vencimientos.IdVehiculo like
ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
ISNULL(@pmIdCliente,IdCliente)
AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase like
ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
ISNULL(@pmTipDoc,TipDoc)
ELSE
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 like
ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
ISNULL(@pmIdCliente,IdCliente)
AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase like
ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
ISNULL(@pmTipDoc,TipDoc)
GO

= PLAN DE EJECUCION ==
StmtText
SET SHOWPLAN_TEXT ON

(1 row(s) affected)

StmtText
-
-
-
-
paUpVencimientosApl 'SDD038'
CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni SMALLDATETIME=Null,@pmFechaFin
SMALLDATETIME=Null
AS
IF ISDATE(@
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_RecFactu

(3 row(s) affected)

StmtText
-
-
-
-
|--Assert(WHERE:(If (([Expr1008]>=0.00 AND
[Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else NULL))
|--Clustered Index
Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
|--Compute
Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
|--Stream Aggregate(GROUP
BY:([Trn_Vencimientos].[TipDoc], [Trn_Vencimientos].[Documento],
[Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item])
DEFINE:([Expr1006]=SUM([Trn_RecFactura].[ValorAbono]-[Trn_RecFactura].[Devol
ucion])
|--Bookmark Lookup(BOOKMARK:([Bmk1004]),
OBJECT:([dbBusNT].[dbo].[Trn_RecFactura]))
|--Parallelism(Gather Streams, ORDER
BY:([Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento] ASC,
[Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC))
|--Nested Loops(Left Outer Join,
OUTER REFERENCES:([Trn_Vencimientos].[Item], [Trn_Vencimientos].[IdCia],
[Trn_Vencimientos].[Documento], [Trn_Vencimientos].[TipDoc]))
|--Parallelism(Distribute
Streams)
| |--Top(ROWCOUNT est 0)
|
|--Parallelism(Gather Streams, ORDER BY:([Trn_Vencimientos].[TipDoc] ASC,
[Trn_Vencimientos].[Documento] ASC, [Trn_Vencimientos].[IdCia] ASC,
[Trn_Vencimientos].[Item] ASC))
|
|--Filter(WHERE:((like([Trn_Vencimientos].[IdCia], isnull([@pmIdCia],
[Trn_Vencimientos].[IdCia]), NULL) AND like([Trn_Vencimientos].[IdClase],
isnull([@pmIdClase], [Trn_Vencimientos].[IdClase])
|
|--Clustered Index
Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
WHERE:((([Trn_Vencimientos].[FecEmision]>=[@pmFechaIni] AND
[Trn_Vencimientos].[FecEmision]<=[@pm
|--Index
Seek(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[IX_Trn_RecFacturaDocumento]),
SEEK:([Trn_RecFactura].[TipDoc]=[Trn_Vencimientos].[TipDoc] AND
[Trn_RecFactura].[Documento]=[Trn_Vencimientos].[Documento]

(13 row(s) affected)

StmtText
-
-
-
-

ELSE
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_R

(1 row(s) affected)

StmtText
-
-
-
-
|--Index
Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[IX_Trn_VencimientosValorA
bono]), SET:([Item1015]=[Trn_Vencimientos].[Item],
[IdCia1014]=[Trn_Vencimientos].[IdCia],
[Documento1013]=[Trn_Vencimientos].[Documento], [ValorAbono1011]=Rai
|--Sort(ORDER BY:([Trn_Vencimientos].[ValorAbono] ASC,
[Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento] ASC,
[Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC, [Bmk1003]
ASC, [Act1009] ASC))
|--Split
|--Assert(WHERE:(If (([Expr1008]>=0.00 AND
[Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else NULL))
|--Clustered Index
Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
|--Compute
Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
|--Parallelism(Gather Streams)
|--Hash Match(Right Outer
Join, HASH:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
[Trn_RecFactura].[IdCiaDoc],
[Trn_RecFactura].[ItemDoc])=([Trn_Vencimientos].[TipDoc],
[Trn_Vencimientos].[Documen

|--Parallelism(Repartition Streams, PARTITION
COLUMNS:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
[Trn_RecFactura].[IdCiaDoc], [Trn_RecFactura].[ItemDoc]))
| |--Clustered Index
Scan(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[PK_Trn_RecFactura]))

|--Parallelism(Distribute Streams, PARTITION
COLUMNS:([Trn_Vencimientos].[TipDoc], [Trn_Vencimientos].[Documento],
[Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item]))
|--Top(ROWCOUNT est
0)

|--Parallelism(Gather Streams)

|--Filter(WHERE:((like([Trn_Vencimientos].[IdCia], isnull([@pmIdCia],
[Trn_Vencimientos].[IdCia]), NULL) AND like([Trn_Vencimientos].[IdClase],
isnull([@pmIdClase], [Trn_Vencimientos].[IdCl

|--Clustered Index
Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
WHERE:(like([Trn_Vencimientos].[IdVehiculo], isnull([@pmIdVehiculo],
[Trn_Vencimientos].[IdVe

(15 row(s) affected)












=Diego

Preguntas similare

Leer las respuestas

#1 Liliana Sorrentino
21/10/2005 - 17:37 | Informe spam
Hola Diego,
En principio yo borraría el índice generado sobre la columna que estás
actualizando, IX_Trn_VencimientosValorAbono, creo que va a mejorar
sustancialmente.
Liliana.

"Diego M R®mero" escribió en el mensaje
news:
Hola

No he podido mejorar este procedimiento; ya le cree indices a todos los
campos que utiliza la clausula WHERE
,se cambie el operador ( = ) por LIKE.

En la tabla Trn_Vencimientos hay mas o menos 250000 registros, y en
Trn_RecFactura hay unos 200000.

Al ejecutar el procedimiento así:
paUpVencimientosApl 'SDD038'
Se está demorando 30 segundos, actualizando mas o menos 800 registro del
vehículo 'SDD038'

¿ Que puedo hacer para reducir el tiempo de ejecución ?

Agradezco su colaboración.

= procedimiento almacenado >
CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni SMALLDATETIME=Null,@pmFechaFin
SMALLDATETIME=Null
AS
IF ISDATE(@pmFechaIni)>0 AND ISDATE(@pmFechaFin)>0--POR FECHA
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 FecEmision BETWEEN @pmFechaIni AND @pmFechaFin
AND Trn_Vencimientos.IdVehiculo like
ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
ISNULL(@pmIdCliente,IdCliente)
AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase like
ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
ISNULL(@pmTipDoc,TipDoc)
ELSE
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 like
ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
ISNULL(@pmIdCliente,IdCliente)
AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase like
ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
ISNULL(@pmTipDoc,TipDoc)
GO

= PLAN DE EJECUCION ==>
StmtText
SET SHOWPLAN_TEXT ON

(1 row(s) affected)

StmtText
-
paUpVencimientosApl 'SDD038'
CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni SMALLDATETIME=Null,@pmFechaFin
SMALLDATETIME=Null
AS
IF ISDATE(@
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_RecFactu

(3 row(s) affected)

StmtText
-
|--Assert(WHERE:(If (([Expr1008]>=0.00 AND
[Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else NULL))
|--Clustered Index
Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
|--Compute
Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
|--Stream Aggregate(GROUP
BY:([Trn_Vencimientos].[TipDoc], [Trn_Vencimientos].[Documento],
[Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item])



DEFINE:([Expr1006]=SUM([Trn_RecFactura].[ValorAbono]-[Trn_RecFactura].[Devol
ucion])
|--Bookmark Lookup(BOOKMARK:([Bmk1004]),
OBJECT:([dbBusNT].[dbo].[Trn_RecFactura]))
|--Parallelism(Gather Streams, ORDER
BY:([Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento] ASC,
[Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC))
|--Nested Loops(Left Outer Join,
OUTER REFERENCES:([Trn_Vencimientos].[Item], [Trn_Vencimientos].[IdCia],
[Trn_Vencimientos].[Documento], [Trn_Vencimientos].[TipDoc]))
|--Parallelism(Distribute
Streams)
| |--Top(ROWCOUNT est 0)
|
|--Parallelism(Gather Streams, ORDER BY:([Trn_Vencimientos].[TipDoc] ASC,
[Trn_Vencimientos].[Documento] ASC, [Trn_Vencimientos].[IdCia] ASC,
[Trn_Vencimientos].[Item] ASC))
|
|--Filter(WHERE:((like([Trn_Vencimientos].[IdCia], isnull([@pmIdCia],
[Trn_Vencimientos].[IdCia]), NULL) AND like([Trn_Vencimientos].[IdClase],
isnull([@pmIdClase], [Trn_Vencimientos].[IdClase])
|
|--Clustered Index
Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
WHERE:((([Trn_Vencimientos].[FecEmision]>=[@pmFechaIni] AND
[Trn_Vencimientos].[FecEmision]<=[@pm
|--Index



Seek(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[IX_Trn_RecFacturaDocumento]),
SEEK:([Trn_RecFactura].[TipDoc]=[Trn_Vencimientos].[TipDoc] AND
[Trn_RecFactura].[Documento]=[Trn_Vencimientos].[Documento]

(13 row(s) affected)

StmtText
-

ELSE
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_R

(1 row(s) affected)

StmtText
-
|--Index



Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[IX_Trn_VencimientosValorA
bono]), SET:([Item1015]=[Trn_Vencimientos].[Item],
[IdCia1014]=[Trn_Vencimientos].[IdCia],
[Documento1013]=[Trn_Vencimientos].[Documento], [ValorAbono1011]=Rai
|--Sort(ORDER BY:([Trn_Vencimientos].[ValorAbono] ASC,
[Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento] ASC,
[Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC, [Bmk1003]
ASC, [Act1009] ASC))
|--Split
|--Assert(WHERE:(If (([Expr1008]>=0.00 AND
[Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else NULL))
|--Clustered Index
Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
|--Compute
Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
|--Parallelism(Gather Streams)
|--Hash Match(Right Outer
Join, HASH:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
[Trn_RecFactura].[IdCiaDoc],
[Trn_RecFactura].[ItemDoc])=([Trn_Vencimientos].[TipDoc],
[Trn_Vencimientos].[Documen

|--Parallelism(Repartition Streams, PARTITION
COLUMNS:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
[Trn_RecFactura].[IdCiaDoc], [Trn_RecFactura].[ItemDoc]))
| |--Clustered


Index
Scan(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[PK_Trn_RecFactura]))

|--Parallelism(Distribute Streams, PARTITION
COLUMNS:([Trn_Vencimientos].[TipDoc], [Trn_Vencimientos].[Documento],
[Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item]))
|--Top(ROWCOUNT


est
0)

|--Parallelism(Gather Streams)

|--Filter(WHERE:((like([Trn_Vencimientos].[IdCia], isnull([@pmIdCia],
[Trn_Vencimientos].[IdCia]), NULL) AND like([Trn_Vencimientos].[IdClase],
isnull([@pmIdClase], [Trn_Vencimientos].[IdCl

|--Clustered Index
Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
WHERE:(like([Trn_Vencimientos].[IdVehiculo], isnull([@pmIdVehiculo],
[Trn_Vencimientos].[IdVe

(15 row(s) affected)












=> Diego


Respuesta Responder a este mensaje
#2 Diego M R®mero
21/10/2005 - 18:38 | Informe spam
Gracias Liliana

Lo hice, pero sigue igual, se demora 35 seg.
¿ Sera que tiene algo que ver el uso de ISNULL(), en la instrucción WHERE ?

Diego

"Liliana Sorrentino" escribió en el mensaje
news:#
Hola Diego,
En principio yo borraría el índice generado sobre la columna que estás
actualizando, IX_Trn_VencimientosValorAbono, creo que va a mejorar
sustancialmente.
Liliana.

"Diego M R®mero" escribió en el mensaje
news:
> Hola
>
> No he podido mejorar este procedimiento; ya le cree indices a todos los
> campos que utiliza la clausula WHERE
> ,se cambie el operador ( = ) por LIKE.
>
> En la tabla Trn_Vencimientos hay mas o menos 250000 registros, y en
> Trn_RecFactura hay unos 200000.
>
> Al ejecutar el procedimiento así:
> paUpVencimientosApl 'SDD038'
> Se está demorando 30 segundos, actualizando mas o menos 800 registro del
> vehículo 'SDD038'
>
> ¿ Que puedo hacer para reducir el tiempo de ejecución ?
>
> Agradezco su colaboración.
>
> = procedimiento almacenado > >
> CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
> VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
> CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
> ,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni SMALLDATETIME=Null,@pmFechaFin
> SMALLDATETIME=Null
> AS
> IF ISDATE(@pmFechaIni)>0 AND ISDATE(@pmFechaFin)>0--POR FECHA
> 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 FecEmision BETWEEN @pmFechaIni AND @pmFechaFin
> AND Trn_Vencimientos.IdVehiculo like
> ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
> ISNULL(@pmIdCliente,IdCliente)
> AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase


like
> ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
> ISNULL(@pmTipDoc,TipDoc)
> ELSE
> 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 like
> ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
> ISNULL(@pmIdCliente,IdCliente)
> AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase


like
> ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
> ISNULL(@pmTipDoc,TipDoc)
> GO
>
> = PLAN DE EJECUCION ==> >
> StmtText
> SET SHOWPLAN_TEXT ON
>
> (1 row(s) affected)
>
> StmtText



> -
> paUpVencimientosApl 'SDD038'
> CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
> VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
> CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
> ,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni SMALLDATETIME=Null,@pmFechaFin
> SMALLDATETIME=Null
> AS
> IF ISDATE(@
> 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_RecFactu
>
> (3 row(s) affected)
>
> StmtText



> -
> |--Assert(WHERE:(If (([Expr1008]>=0.00 AND
> [Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else


NULL))
> |--Clustered Index
>


Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
> |--Compute
> Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
> |--Stream Aggregate(GROUP
> BY:([Trn_Vencimientos].[TipDoc], [Trn_Vencimientos].[Documento],
> [Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item])
>



DEFINE:([Expr1006]=SUM([Trn_RecFactura].[ValorAbono]-[Trn_RecFactura].[Devol
> ucion])
> |--Bookmark Lookup(BOOKMARK:([Bmk1004]),
> OBJECT:([dbBusNT].[dbo].[Trn_RecFactura]))
> |--Parallelism(Gather Streams,


ORDER
> BY:([Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento] ASC,
> [Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC))
> |--Nested Loops(Left Outer


Join,
> OUTER REFERENCES:([Trn_Vencimientos].[Item], [Trn_Vencimientos].[IdCia],
> [Trn_Vencimientos].[Documento], [Trn_Vencimientos].[TipDoc]))
> |--Parallelism(Distribute
> Streams)
> | |--Top(ROWCOUNT est


0)
> |
> |--Parallelism(Gather Streams, ORDER BY:([Trn_Vencimientos].[TipDoc]


ASC,
> [Trn_Vencimientos].[Documento] ASC, [Trn_Vencimientos].[IdCia] ASC,
> [Trn_Vencimientos].[Item] ASC))
> |
> |--Filter(WHERE:((like([Trn_Vencimientos].[IdCia], isnull([@pmIdCia],
> [Trn_Vencimientos].[IdCia]), NULL) AND


like([Trn_Vencimientos].[IdClase],
> isnull([@pmIdClase], [Trn_Vencimientos].[IdClase])
> |
> |--Clustered Index
> Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> WHERE:((([Trn_Vencimientos].[FecEmision]>=[@pmFechaIni] AND
> [Trn_Vencimientos].[FecEmision]<=[@pm
> |--Index
>



Seek(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[IX_Trn_RecFacturaDocumento]),
> SEEK:([Trn_RecFactura].[TipDoc]=[Trn_Vencimientos].[TipDoc] AND
> [Trn_RecFactura].[Documento]=[Trn_Vencimientos].[Documento]
>
> (13 row(s) affected)
>
> StmtText



> -
>
> ELSE
> 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_R
>
> (1 row(s) affected)
>
> StmtText



> -
> |--Index
>



Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[IX_Trn_VencimientosValorA
> bono]), SET:([Item1015]=[Trn_Vencimientos].[Item],
> [IdCia1014]=[Trn_Vencimientos].[IdCia],
> [Documento1013]=[Trn_Vencimientos].[Documento], [ValorAbono1011]=Rai
> |--Sort(ORDER BY:([Trn_Vencimientos].[ValorAbono] ASC,
> [Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento] ASC,
> [Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC, [Bmk1003]
> ASC, [Act1009] ASC))
> |--Split
> |--Assert(WHERE:(If (([Expr1008]>=0.00 AND
> [Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else


NULL))
> |--Clustered Index
>


Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
> |--Compute
> Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
> |--Parallelism(Gather Streams)
> |--Hash Match(Right Outer
> Join, HASH:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
> [Trn_RecFactura].[IdCiaDoc],
> [Trn_RecFactura].[ItemDoc])=([Trn_Vencimientos].[TipDoc],
> [Trn_Vencimientos].[Documen
>
> |--Parallelism(Repartition Streams, PARTITION
> COLUMNS:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
> [Trn_RecFactura].[IdCiaDoc], [Trn_RecFactura].[ItemDoc]))
> | |--Clustered
Index
> Scan(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[PK_Trn_RecFactura]))
>
> |--Parallelism(Distribute Streams, PARTITION
> COLUMNS:([Trn_Vencimientos].[TipDoc], [Trn_Vencimientos].[Documento],
> [Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item]))
> |--Top(ROWCOUNT
est
> 0)
>
> |--Parallelism(Gather Streams)
>
> |--Filter(WHERE:((like([Trn_Vencimientos].[IdCia], isnull([@pmIdCia],
> [Trn_Vencimientos].[IdCia]), NULL) AND


like([Trn_Vencimientos].[IdClase],
> isnull([@pmIdClase], [Trn_Vencimientos].[IdCl
>
> |--Clustered Index
> Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> WHERE:(like([Trn_Vencimientos].[IdVehiculo], isnull([@pmIdVehiculo],
> [Trn_Vencimientos].[IdVe
>
> (15 row(s) affected)
>
>
>
>
>
>
>
>
>
>
>
>
> => > Diego
>
>


Respuesta Responder a este mensaje
#3 Saul Batista
21/10/2005 - 19:39 | Informe spam
creo que se cambiares tu UPDATE Tabla SET Campo = (SELECT )

para uno

UPDATE Tabla SET Campo = TablaValores.Campo
FROM Tabla INNER JOIN (
SELECT ..
) as TablaValores
Where

mejorará mucho

Saludos

Saul Batista


"Diego M R®mero" wrote in message
news:
Gracias Liliana

Lo hice, pero sigue igual, se demora 35 seg.
¿ Sera que tiene algo que ver el uso de ISNULL(), en la instrucción WHERE
?

Diego

"Liliana Sorrentino" escribió en el
mensaje
news:#
Hola Diego,
En principio yo borraría el índice generado sobre la columna que estás
actualizando, IX_Trn_VencimientosValorAbono, creo que va a mejorar
sustancialmente.
Liliana.

"Diego M R®mero" escribió en el mensaje
news:
> Hola
>
> No he podido mejorar este procedimiento; ya le cree indices a todos los
> campos que utiliza la clausula WHERE
> ,se cambie el operador ( = ) por LIKE.
>
> En la tabla Trn_Vencimientos hay mas o menos 250000 registros, y en
> Trn_RecFactura hay unos 200000.
>
> Al ejecutar el procedimiento así:
> paUpVencimientosApl 'SDD038'
> Se está demorando 30 segundos, actualizando mas o menos 800 registro
> del
> vehículo 'SDD038'
>
> ¿ Que puedo hacer para reducir el tiempo de ejecución ?
>
> Agradezco su colaboración.
>
> = procedimiento almacenado >> >
> CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
> VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
> CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
> ,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni SMALLDATETIME=Null,@pmFechaFin
> SMALLDATETIME=Null
> AS
> IF ISDATE(@pmFechaIni)>0 AND ISDATE(@pmFechaFin)>0--POR FECHA
> 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 FecEmision BETWEEN @pmFechaIni AND @pmFechaFin
> AND Trn_Vencimientos.IdVehiculo like
> ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
> ISNULL(@pmIdCliente,IdCliente)
> AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase


like
> ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
> ISNULL(@pmTipDoc,TipDoc)
> ELSE
> 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 like
> ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
> ISNULL(@pmIdCliente,IdCliente)
> AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase


like
> ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
> ISNULL(@pmTipDoc,TipDoc)
> GO
>
> = PLAN DE EJECUCION ==>> >
> StmtText
> SET SHOWPLAN_TEXT ON
>
> (1 row(s) affected)
>
> StmtText



> -
> paUpVencimientosApl 'SDD038'
> CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
> VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
> CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
> ,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni SMALLDATETIME=Null,@pmFechaFin
> SMALLDATETIME=Null
> AS
> IF ISDATE(@
> 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_RecFactu
>
> (3 row(s) affected)
>
> StmtText



> -
> |--Assert(WHERE:(If (([Expr1008]>=0.00 AND
> [Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else


NULL))
> |--Clustered Index
>


Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
> |--Compute
> Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
> |--Stream Aggregate(GROUP
> BY:([Trn_Vencimientos].[TipDoc], [Trn_Vencimientos].[Documento],
> [Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item])
>



DEFINE:([Expr1006]=SUM([Trn_RecFactura].[ValorAbono]-[Trn_RecFactura].[Devol
> ucion])
> |--Bookmark
> Lookup(BOOKMARK:([Bmk1004]),
> OBJECT:([dbBusNT].[dbo].[Trn_RecFactura]))
> |--Parallelism(Gather Streams,


ORDER
> BY:([Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento]
> ASC,
> [Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC))
> |--Nested Loops(Left Outer


Join,
> OUTER REFERENCES:([Trn_Vencimientos].[Item],
> [Trn_Vencimientos].[IdCia],
> [Trn_Vencimientos].[Documento], [Trn_Vencimientos].[TipDoc]))
>
> |--Parallelism(Distribute
> Streams)
> | |--Top(ROWCOUNT est


0)
> |
> |--Parallelism(Gather Streams, ORDER BY:([Trn_Vencimientos].[TipDoc]


ASC,
> [Trn_Vencimientos].[Documento] ASC, [Trn_Vencimientos].[IdCia] ASC,
> [Trn_Vencimientos].[Item] ASC))
> |
> |--Filter(WHERE:((like([Trn_Vencimientos].[IdCia], isnull([@pmIdCia],
> [Trn_Vencimientos].[IdCia]), NULL) AND


like([Trn_Vencimientos].[IdClase],
> isnull([@pmIdClase], [Trn_Vencimientos].[IdClase])
> |
> |--Clustered Index
> Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> WHERE:((([Trn_Vencimientos].[FecEmision]>=[@pmFechaIni] AND
> [Trn_Vencimientos].[FecEmision]<=[@pm
> |--Index
>



Seek(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[IX_Trn_RecFacturaDocumento]),
> SEEK:([Trn_RecFactura].[TipDoc]=[Trn_Vencimientos].[TipDoc] AND
> [Trn_RecFactura].[Documento]=[Trn_Vencimientos].[Documento]
>
> (13 row(s) affected)
>
> StmtText



> -
>
> ELSE
> 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_R
>
> (1 row(s) affected)
>
> StmtText



> -
> |--Index
>



Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[IX_Trn_VencimientosValorA
> bono]), SET:([Item1015]=[Trn_Vencimientos].[Item],
> [IdCia1014]=[Trn_Vencimientos].[IdCia],
> [Documento1013]=[Trn_Vencimientos].[Documento], [ValorAbono1011]=Rai
> |--Sort(ORDER BY:([Trn_Vencimientos].[ValorAbono] ASC,
> [Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento] ASC,
> [Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC,
> [Bmk1003]
> ASC, [Act1009] ASC))
> |--Split
> |--Assert(WHERE:(If (([Expr1008]>=0.00 AND
> [Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else


NULL))
> |--Clustered Index
>


Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
> |--Compute
> Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
> |--Parallelism(Gather
> Streams)
> |--Hash Match(Right
> Outer
> Join, HASH:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
> [Trn_RecFactura].[IdCiaDoc],
> [Trn_RecFactura].[ItemDoc])=([Trn_Vencimientos].[TipDoc],
> [Trn_Vencimientos].[Documen
>
> |--Parallelism(Repartition Streams, PARTITION
> COLUMNS:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
> [Trn_RecFactura].[IdCiaDoc], [Trn_RecFactura].[ItemDoc]))
> | |--Clustered
Index
> Scan(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[PK_Trn_RecFactura]))
>
> |--Parallelism(Distribute Streams, PARTITION
> COLUMNS:([Trn_Vencimientos].[TipDoc], [Trn_Vencimientos].[Documento],
> [Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item]))
>
> |--Top(ROWCOUNT
est
> 0)
>
> |--Parallelism(Gather Streams)
>
> |--Filter(WHERE:((like([Trn_Vencimientos].[IdCia], isnull([@pmIdCia],
> [Trn_Vencimientos].[IdCia]), NULL) AND


like([Trn_Vencimientos].[IdClase],
> isnull([@pmIdClase], [Trn_Vencimientos].[IdCl
>
> |--Clustered Index
> Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> WHERE:(like([Trn_Vencimientos].[IdVehiculo], isnull([@pmIdVehiculo],
> [Trn_Vencimientos].[IdVe
>
> (15 row(s) affected)
>
>
>
>
>
>
>
>
>
>
>
>
> =>> > Diego
>
>






Respuesta Responder a este mensaje
#4 Liliana Sorrentino
21/10/2005 - 20:37 | Informe spam
Diego,
El dato del vehículo ¿llega siempre? Si es así, sacá el LIKE y usá =.
¿Qué indices tiene la tabla?

"Diego M R®mero" escribió en el mensaje
news:
Gracias Liliana

Lo hice, pero sigue igual, se demora 35 seg.
¿ Sera que tiene algo que ver el uso de ISNULL(), en la instrucción WHERE


?

Diego

"Liliana Sorrentino" escribió en el


mensaje
news:#
> Hola Diego,
> En principio yo borraría el índice generado sobre la columna que estás
> actualizando, IX_Trn_VencimientosValorAbono, creo que va a mejorar
> sustancialmente.
> Liliana.
>
> "Diego M R®mero" escribió en el mensaje
> news:
> > Hola
> >
> > No he podido mejorar este procedimiento; ya le cree indices a todos


los
> > campos que utiliza la clausula WHERE
> > ,se cambie el operador ( = ) por LIKE.
> >
> > En la tabla Trn_Vencimientos hay mas o menos 250000 registros, y en
> > Trn_RecFactura hay unos 200000.
> >
> > Al ejecutar el procedimiento así:
> > paUpVencimientosApl 'SDD038'
> > Se está demorando 30 segundos, actualizando mas o menos 800 registro


del
> > vehículo 'SDD038'
> >
> > ¿ Que puedo hacer para reducir el tiempo de ejecución ?
> >
> > Agradezco su colaboración.
> >
> > = procedimiento almacenado > > >
> > CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
> > VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
> > CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
> > ,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni SMALLDATETIME=Null,@pmFechaFin
> > SMALLDATETIME=Null
> > AS
> > IF ISDATE(@pmFechaIni)>0 AND ISDATE(@pmFechaFin)>0--POR FECHA
> > 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 FecEmision BETWEEN @pmFechaIni AND @pmFechaFin
> > AND Trn_Vencimientos.IdVehiculo like
> > ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
> > ISNULL(@pmIdCliente,IdCliente)
> > AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase
like
> > ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
> > ISNULL(@pmTipDoc,TipDoc)
> > ELSE
> > 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 like
> > ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
> > ISNULL(@pmIdCliente,IdCliente)
> > AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase
like
> > ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
> > ISNULL(@pmTipDoc,TipDoc)
> > GO
> >
> > = PLAN DE EJECUCION ==> > >
> > StmtText
> > SET SHOWPLAN_TEXT ON
> >
> > (1 row(s) affected)
> >
> > StmtText
>

>

>

> > -
> > paUpVencimientosApl 'SDD038'
> > CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
> > VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
> > CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
> > ,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni SMALLDATETIME=Null,@pmFechaFin
> > SMALLDATETIME=Null
> > AS
> > IF ISDATE(@
> > 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_RecFactu
> >
> > (3 row(s) affected)
> >
> > StmtText
>

>

>

> > -
> > |--Assert(WHERE:(If (([Expr1008]>=0.00 AND
> > [Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else
NULL))
> > |--Clustered Index
> >
Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> > SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
> > |--Compute
> > Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
> > |--Stream Aggregate(GROUP
> > BY:([Trn_Vencimientos].[TipDoc], [Trn_Vencimientos].[Documento],
> > [Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item])
> >
>



DEFINE:([Expr1006]=SUM([Trn_RecFactura].[ValorAbono]-[Trn_RecFactura].[Devol
> > ucion])
> > |--Bookmark


Lookup(BOOKMARK:([Bmk1004]),
> > OBJECT:([dbBusNT].[dbo].[Trn_RecFactura]))
> > |--Parallelism(Gather Streams,
ORDER
> > BY:([Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento]


ASC,
> > [Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC))
> > |--Nested Loops(Left Outer
Join,
> > OUTER REFERENCES:([Trn_Vencimientos].[Item],


[Trn_Vencimientos].[IdCia],
> > [Trn_Vencimientos].[Documento], [Trn_Vencimientos].[TipDoc]))
> >


|--Parallelism(Distribute
> > Streams)
> > | |--Top(ROWCOUNT


est
0)
> > |
> > |--Parallelism(Gather Streams, ORDER BY:([Trn_Vencimientos].[TipDoc]
ASC,
> > [Trn_Vencimientos].[Documento] ASC, [Trn_Vencimientos].[IdCia] ASC,
> > [Trn_Vencimientos].[Item] ASC))
> > |
> > |--Filter(WHERE:((like([Trn_Vencimientos].[IdCia], isnull([@pmIdCia],
> > [Trn_Vencimientos].[IdCia]), NULL) AND
like([Trn_Vencimientos].[IdClase],
> > isnull([@pmIdClase], [Trn_Vencimientos].[IdClase])
> > |
> > |--Clustered Index
> >


Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> > WHERE:((([Trn_Vencimientos].[FecEmision]>=[@pmFechaIni] AND
> > [Trn_Vencimientos].[FecEmision]<=[@pm
> > |--Index
> >
>



Seek(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[IX_Trn_RecFacturaDocumento]),
> > SEEK:([Trn_RecFactura].[TipDoc]=[Trn_Vencimientos].[TipDoc] AND
> > [Trn_RecFactura].[Documento]=[Trn_Vencimientos].[Documento]
> >
> > (13 row(s) affected)
> >
> > StmtText
>

>

>

> > -
> >
> > ELSE
> > 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_R
> >
> > (1 row(s) affected)
> >
> > StmtText
>

>

>

> > -
> > |--Index
> >
>



Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[IX_Trn_VencimientosValorA
> > bono]), SET:([Item1015]=[Trn_Vencimientos].[Item],
> > [IdCia1014]=[Trn_Vencimientos].[IdCia],
> > [Documento1013]=[Trn_Vencimientos].[Documento], [ValorAbono1011]=Rai
> > |--Sort(ORDER BY:([Trn_Vencimientos].[ValorAbono]


ASC,
> > [Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento] ASC,
> > [Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC,


[Bmk1003]
> > ASC, [Act1009] ASC))
> > |--Split
> > |--Assert(WHERE:(If (([Expr1008]>=0.00 AND
> > [Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else
NULL))
> > |--Clustered Index
> >
Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> > SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
> > |--Compute
> > Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
> > |--Parallelism(Gather


Streams)
> > |--Hash Match(Right


Outer
> > Join, HASH:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
> > [Trn_RecFactura].[IdCiaDoc],
> > [Trn_RecFactura].[ItemDoc])=([Trn_Vencimientos].[TipDoc],
> > [Trn_Vencimientos].[Documen
> >
> > |--Parallelism(Repartition Streams, PARTITION
> > COLUMNS:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
> > [Trn_RecFactura].[IdCiaDoc], [Trn_RecFactura].[ItemDoc]))
> > | |--Clustered
> Index
> > Scan(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[PK_Trn_RecFactura]))
> >
> > |--Parallelism(Distribute Streams, PARTITION
> > COLUMNS:([Trn_Vencimientos].[TipDoc], [Trn_Vencimientos].[Documento],
> > [Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item]))
> >


|--Top(ROWCOUNT
> est
> > 0)
> >
> > |--Parallelism(Gather Streams)
> >
> > |--Filter(WHERE:((like([Trn_Vencimientos].[IdCia], isnull([@pmIdCia],
> > [Trn_Vencimientos].[IdCia]), NULL) AND
like([Trn_Vencimientos].[IdClase],
> > isnull([@pmIdClase], [Trn_Vencimientos].[IdCl
> >
> > |--Clustered Index
> >


Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> > WHERE:(like([Trn_Vencimientos].[IdVehiculo], isnull([@pmIdVehiculo],
> > [Trn_Vencimientos].[IdVe
> >
> > (15 row(s) affected)
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > => > > Diego
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Diego M R®mero
21/10/2005 - 22:16 | Informe spam
1. Ese es el problema, a veces llega el parametro @pmIdVehiculo, a veces en
nulo.
a veces @pmIdCliente, otras @pmIdCia, o todos, es decir todas las
combinaciones posibles.
Por eso se utilizaron los ISNULL, para no hacer un SP por cada combinación
de parametros.

2. Aqui me dijeron que utilizara el LIKE en lugar del =, porque el operador
= no utiliza los índices.

3. Trn_vencimientos, tiene los siguientes índices:
PK_Trn_Vencimientos (tipDoc,Documento,IdCia,item)
IX_Trn_VencimientosIdVehiculo (IdVehiculo)
IX_Trn_VencimientosIdCliente (IdCliente)
IX_Trn_VencimientosIdCia (IdCia)
IX_Trn_VencimientosIdClase(IdClase)
IX_Trn_VencimientosItem(Item)
IX_Trn_VencimientosTipDoc (TipDoc)

Trn_RecFactura, tiene los indices:
PK_Trn_RecFactura (TipRec,Recibo,IdCia,Item)
IX_Trn_RecFacturaIdVehiculo
IX_Trn_RecFacturaIdCliente
IX_Trn_RecFacturaIdClase
IX_Trn_RecFacturaDocumento (TipDoc,Documento,IdCiaDoc,ItemDoc)


Diego


"Liliana Sorrentino" escribió en el mensaje
news:#
Diego,
El dato del vehículo ¿llega siempre? Si es así, sacá el LIKE y usá =.
¿Qué indices tiene la tabla?

"Diego M R®mero" escribió en el mensaje
news:
> Gracias Liliana
>
> Lo hice, pero sigue igual, se demora 35 seg.
> ¿ Sera que tiene algo que ver el uso de ISNULL(), en la instrucción


WHERE
?
>
> Diego
>
> "Liliana Sorrentino" escribió en el
mensaje
> news:#
> > Hola Diego,
> > En principio yo borraría el índice generado sobre la columna que estás
> > actualizando, IX_Trn_VencimientosValorAbono, creo que va a mejorar
> > sustancialmente.
> > Liliana.
> >
> > "Diego M R®mero" escribió en el mensaje
> > news:
> > > Hola
> > >
> > > No he podido mejorar este procedimiento; ya le cree indices a todos
los
> > > campos que utiliza la clausula WHERE
> > > ,se cambie el operador ( = ) por LIKE.
> > >
> > > En la tabla Trn_Vencimientos hay mas o menos 250000 registros, y en
> > > Trn_RecFactura hay unos 200000.
> > >
> > > Al ejecutar el procedimiento así:
> > > paUpVencimientosApl 'SDD038'
> > > Se está demorando 30 segundos, actualizando mas o menos 800 registro
del
> > > vehículo 'SDD038'
> > >
> > > ¿ Que puedo hacer para reducir el tiempo de ejecución ?
> > >
> > > Agradezco su colaboración.
> > >
> > > = procedimiento almacenado > > > >
> > > CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
> > > VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
> > > CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
> > > ,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni


SMALLDATETIME=Null,@pmFechaFin
> > > SMALLDATETIME=Null
> > > AS
> > > IF ISDATE(@pmFechaIni)>0 AND ISDATE(@pmFechaFin)>0--POR FECHA
> > > 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 FecEmision BETWEEN @pmFechaIni AND @pmFechaFin
> > > AND Trn_Vencimientos.IdVehiculo like
> > > ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
> > > ISNULL(@pmIdCliente,IdCliente)
> > > AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase
> like
> > > ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
> > > ISNULL(@pmTipDoc,TipDoc)
> > > ELSE
> > > 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 like
> > > ISNULL(@pmIdVehiculo,Trn_Vencimientos.IdVehiculo) AND IdCliente like
> > > ISNULL(@pmIdCliente,IdCliente)
> > > AND IdCia like ISNULL(@pmIdCia,IdCia) AND Trn_Vencimientos.IdClase
> like
> > > ISNULL(@pmIdClase,Trn_Vencimientos.IdClase) AND TipDoc like
> > > ISNULL(@pmTipDoc,TipDoc)
> > > GO
> > >
> > > = PLAN DE EJECUCION ==> > > >
> > > StmtText
> > > SET SHOWPLAN_TEXT ON
> > >
> > > (1 row(s) affected)
> > >
> > > StmtText
> >
>

> >
>

> >
>

> > > -
> > > paUpVencimientosApl 'SDD038'
> > > CREATE PROCEDURE paUpVencimientosApl @pmIdVehiculo
> > > VARCHAR(10)=Null,@pmIdCliente VARCHAR(11)=Null,@pmIdCia
> > > CHAR(2)=Null,@pmIdClase VARCHAR(4)=Null
> > > ,@pmTipDoc VARCHAR(3)=Null,@pmFechaIni


SMALLDATETIME=Null,@pmFechaFin
> > > SMALLDATETIME=Null
> > > AS
> > > IF ISDATE(@
> > > 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_RecFactu
> > >
> > > (3 row(s) affected)
> > >
> > > StmtText
> >
>

> >
>

> >
>

> > > -
> > > |--Assert(WHERE:(If (([Expr1008]>=0.00 AND
> > > [Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else
> NULL))
> > > |--Clustered Index
> > >
>


Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> > > SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
> > > |--Compute
> > > Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
> > > |--Stream Aggregate(GROUP
> > > BY:([Trn_Vencimientos].[TipDoc], [Trn_Vencimientos].[Documento],
> > > [Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item])
> > >
> >
>



DEFINE:([Expr1006]=SUM([Trn_RecFactura].[ValorAbono]-[Trn_RecFactura].[Devol
> > > ucion])
> > > |--Bookmark
Lookup(BOOKMARK:([Bmk1004]),
> > > OBJECT:([dbBusNT].[dbo].[Trn_RecFactura]))
> > > |--Parallelism(Gather Streams,
> ORDER
> > > BY:([Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento]
ASC,
> > > [Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC))
> > > |--Nested Loops(Left Outer
> Join,
> > > OUTER REFERENCES:([Trn_Vencimientos].[Item],
[Trn_Vencimientos].[IdCia],
> > > [Trn_Vencimientos].[Documento], [Trn_Vencimientos].[TipDoc]))
> > >
|--Parallelism(Distribute
> > > Streams)
> > > | |--Top(ROWCOUNT
est
> 0)
> > > |
> > > |--Parallelism(Gather Streams, ORDER BY:([Trn_Vencimientos].[TipDoc]
> ASC,
> > > [Trn_Vencimientos].[Documento] ASC, [Trn_Vencimientos].[IdCia] ASC,
> > > [Trn_Vencimientos].[Item] ASC))
> > > |
> > > |--Filter(WHERE:((like([Trn_Vencimientos].[IdCia],


isnull([@pmIdCia],
> > > [Trn_Vencimientos].[IdCia]), NULL) AND
> like([Trn_Vencimientos].[IdClase],
> > > isnull([@pmIdClase], [Trn_Vencimientos].[IdClase])
> > > |
> > > |--Clustered Index
> > >
Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> > > WHERE:((([Trn_Vencimientos].[FecEmision]>=[@pmFechaIni] AND
> > > [Trn_Vencimientos].[FecEmision]<=[@pm
> > > |--Index
> > >
> >
>



Seek(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[IX_Trn_RecFacturaDocumento]),
> > > SEEK:([Trn_RecFactura].[TipDoc]=[Trn_Vencimientos].[TipDoc] AND
> > > [Trn_RecFactura].[Documento]=[Trn_Vencimientos].[Documento]
> > >
> > > (13 row(s) affected)
> > >
> > > StmtText
> >
>

> >
>

> >
>

> > > -
> > >
> > > ELSE
> > > 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_R
> > >
> > > (1 row(s) affected)
> > >
> > > StmtText
> >
>

> >
>

> >
>

> > > -
> > > |--Index
> > >
> >
>



Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[IX_Trn_VencimientosValorA
> > > bono]), SET:([Item1015]=[Trn_Vencimientos].[Item],
> > > [IdCia1014]=[Trn_Vencimientos].[IdCia],
> > > [Documento1013]=[Trn_Vencimientos].[Documento], [ValorAbono1011]=Rai
> > > |--Sort(ORDER BY:([Trn_Vencimientos].[ValorAbono]
ASC,
> > > [Trn_Vencimientos].[TipDoc] ASC, [Trn_Vencimientos].[Documento] ASC,
> > > [Trn_Vencimientos].[IdCia] ASC, [Trn_Vencimientos].[Item] ASC,
[Bmk1003]
> > > ASC, [Act1009] ASC))
> > > |--Split
> > > |--Assert(WHERE:(If (([Expr1008]>=0.00


AND
> > > [Expr1008]<=[Trn_Vencimientos].[ValorFactura]+1.00)=0) then 0 else
> NULL))
> > > |--Clustered Index
> > >
>


Update(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> > > SET:([Trn_Vencimientos].[ValorAbono]=RaiseIfNull([Expr1008])))
> > > |--Compute
> > > Scalar(DEFINE:([Expr1008]=isnull([Expr1006], 0.00)))
> > > |--Parallelism(Gather
Streams)
> > > |--Hash Match(Right
Outer
> > > Join, HASH:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
> > > [Trn_RecFactura].[IdCiaDoc],
> > > [Trn_RecFactura].[ItemDoc])=([Trn_Vencimientos].[TipDoc],
> > > [Trn_Vencimientos].[Documen
> > >
> > > |--Parallelism(Repartition Streams, PARTITION
> > > COLUMNS:([Trn_RecFactura].[TipDoc], [Trn_RecFactura].[Documento],
> > > [Trn_RecFactura].[IdCiaDoc], [Trn_RecFactura].[ItemDoc]))
> > > |


|--Clustered
> > Index
> > > Scan(OBJECT:([dbBusNT].[dbo].[Trn_RecFactura].[PK_Trn_RecFactura]))
> > >
> > > |--Parallelism(Distribute Streams, PARTITION
> > > COLUMNS:([Trn_Vencimientos].[TipDoc],


[Trn_Vencimientos].[Documento],
> > > [Trn_Vencimientos].[IdCia], [Trn_Vencimientos].[Item]))
> > >
|--Top(ROWCOUNT
> > est
> > > 0)
> > >
> > > |--Parallelism(Gather Streams)
> > >
> > > |--Filter(WHERE:((like([Trn_Vencimientos].[IdCia],


isnull([@pmIdCia],
> > > [Trn_Vencimientos].[IdCia]), NULL) AND
> like([Trn_Vencimientos].[IdClase],
> > > isnull([@pmIdClase], [Trn_Vencimientos].[IdCl
> > >
> > > |--Clustered Index
> > >
Scan(OBJECT:([dbBusNT].[dbo].[Trn_Vencimientos].[PK_Trn_Vencimientos]),
> > > WHERE:(like([Trn_Vencimientos].[IdVehiculo], isnull([@pmIdVehiculo],
> > > [Trn_Vencimientos].[IdVe
> > >
> > > (15 row(s) affected)
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > => > > > Diego
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida