[firebase-br] Select muito lento
Carlos - GMail
krlosgilson em gmail.com
Ter Fev 21 13:37:12 -03 2012
Boa tarde! Minha tabela possui os índices corretamente, eu creio que a
lentidão seja nos joins, só que não vi até agora um outro jeito de
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