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]