[firebase-br] Select muito lento
Carlos - GMail
krlosgilson em gmail.com
Qua Fev 22 17:55:50 -03 2012
Cantu, desculpa a ignorância, mas qual plano? onde posso ver isso?
> 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