[firebase-br] Select muito lento

Carlos H. Cantu listas em warmboot.com.br
Ter Fev 21 22:33:57 -03 2012


Qual é o plano gerado pela consulta?

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

CG> Boa tarde! Minha tabela possui os índices corretamente, eu creio que a
CG> lentidão seja nos joins, só que não vi até agora um outro jeito de 
CG> melhorar. Valeu Diego Bulgari!
>> Boa tarde!:)
>>
>> Criou índices para estes campos?
>> Pode tentar também fazer um backup e restaurar a fim de limpar sujeiras do
>> banco.
>>
>> Abraço
>> Diego Bulgarelli
>>
>> 2012/2/20 Carlos - GMail<krlosgilson em gmail.com>
>>
>>> >  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