Pessoal, 

a function SQL (MS-SQL) abaixo é chamada de dentro de um sistema em Delphi,
é um volume grande de informações mas o cliente quer que o sistema fique mais 
rápido,
alguém tem alguma sugestão que possa otimiza-la e deixá-la mais rápida ? 


CREATE function CEstoque (@Produto Int, @Empresa Int)

returns Money

as

begin
   Declare @Entradas        Money
   Declare @Saidas          Money
   Declare @Ajustes         Money
   Declare @Inicio          Money   
   Declare @Data            DateTime

   Select @Saidas=(Select Sum( (Case IsNull(N.Entrada,'N') When 'S' Then I.Qtde 
Else 0 End) - (Case IsNull(N.Entrada,'N') When 'N' Then I.Qtde Else 0 End) ) 
                             From NfItens I 
                             Left Join Nf D On D.Nrodoc=I.Nrodoc and 
D.Serie=I.Serie and D.Empresa=I.Empresa 
                             Left Join Produtos PP On PP.Codigo=I.Calitem 
                             Left Join NatOper N On N.Chave=D.NatOper 
                             Where (i.calit...@produto or 
IsNull(Pp.ProdutoBaixa,0)=...@produto) 
                            and d.empre...@empresa 
                            and D.DataRef>=(Select Max(Data) 
                            From EstoqueInicio 
                            Where produ...@produto)),
              @Entradas=(Select Sum(I.Qtde) 
                                 From EntradaIte I 
                                 Left Join Entrada D On D.Nrodoc=I.Nrodoc and 
D.Fornece=I.Fornece 
                                 Where d.fili...@empresa   
                                 and i.mater...@produto 
                                 and D.Entrada>=(Select Max(Data) 
                                 From EstoqueInicio 
                                 Where produ...@produto)),
              @Ajustes=(Select Sum( (Case I.ES When 'E' Then I.Qtde Else 0 End) 
- (Case I.Es When 'S' Then I.Qtde Else 0 End) ) 
                               From AjusteEst I 
                               Where i.codi...@produto 
                               and i.fili...@empresa 
                               and I.Data>=(Select Max(Data) From EstoqueInicio 
Where produ...@produto)),
              @Inicio=(Select D.Qtde 
                            From EstoqueInicio D 
                            Where d.produ...@produto 
                            and d.empre...@empresa 
                            and D.Data=(Select Max(Data) From EstoqueInicio   
Where produ...@produto)) 
   From Produtos P
   Where codi...@produto

   Return 
IsNull(@Inicio,0)+IsNull(@Entradas,0)+IsNull(@Saidas,0)+IsNull(@Ajustes,0);

END



[As partes desta mensagem que não continham texto foram removidas]

Responder a