[firebase-br] Select muito lento

Carlos - GMail krlosgilson em gmail.com
Seg Fev 20 12:56:34 -03 2012


Bom dia a todos da lista!

Pessoal estou com um probleminha que to tentando resolver a dias, meu 
select abaixo está demorando muito para retornar os dados, mesmo quando 
se tem apenas um registro, a demora está sendo entre 30 a 60 seg. Tenho 
muitos registros nessas tabelas, mas como mencionei acima mesmo para 
retornar apenas um registro a demora é muito grande. Alguém poderia me 
dar um dica de como aperfeiçoar esse select trazendo os mesmos 
resultados em um tempo menor? Agradeço desde já a todos!

CREATE OR ALTER PROCEDURE SP_REL_RECIBOS_COMISSOES2 (
     pidempresa integer,
     pdatainicial date,
     pdatafinal date,
     pusuario varchar(10))
returns (
     ousuario varchar(10),
     ovrtaxas numeric(15,2),
     ovrpgtospacote numeric(15,2),
     ovrpgtostitulos numeric(15,2))
as
begin
   for
     select
     distinct(d.usuario_comis) ousuario,
     coalesce(sum((select sum(coalesce(s.vr_total,0)) from 
fichas_servicos s left join tb_servicos ts on (s.codigo_servico = 
ts.ser_cod) where s.id_data = d.id and ts.is_taxa = 1)),0) ovrtaxas,
     coalesce(sum((select sum(coalesce(p.valor,0)) from 
fichas_servicos_pgtos p left join sp_formaspgto f on (p.tipo_pgto = 
f.oid) where p.id_data = d.id and f.ocontabiliza = 1)),0) ovrpgtospacote,
     0.00 ovrpgtostitulos
     from fichas_servicos_datas d
     where (d.data between :pdatainicial and :pdatafinal) and
     ((:pidempresa = 0) or (d.id_empresa =:pidempresa)) and
     ((:pusuario = '') or (d.usuario_comis =:pusuario)) and
     (coalesce(d.status,1) <> 2)
     group by 1
   union all
     select
     distinct(t.usuario_comis) ousuario,
     0.00 ovrtaxas,
     0.00 ovrpgtospacote,
     sum(coalesce(t.vr_recebido,0)) ovrpgtostitulos
     from titulos_receber_baixas t
     left join sp_formaspgto f on (t.tipo_movimento = f.oid)
     where (t.data between :pdatainicial and :pdatafinal) and
     ((:pidempresa = 0) or (t.id_empresa =:pidempresa)) and
     ((:pusuario = '') or (t.usuario_comis =:pusuario)) and
     (f.ocontabiliza = 1)
     group by 1
   into :ousuario, :ovrtaxas, :ovrpgtospacote, :ovrpgtostitulos
   do suspend;
end


Mais detalhes sobre a lista de discussão lista