[firebase-br] Query muuuiiiitttooo lenta (ainda)

Felipe Aron felipearon em gmail.com
Sex Ago 3 08:09:21 -03 2012


É preciso tomar muito cuidado com criação de índices, pois se o mesmo tiver
baixa seletividade, ele vai mais atrapalhar do que ajudar.

Pela lógica, o campo PAGO e DELETADO deve ser algo como booleano (0 ou 1, S
ou N, etc). Nesse caso criar um índice pra esse campo só iria atrapalhar.

2012/8/3 marcelo <marcelo em teflamar.com.br>

> zottis, verifique se você tem esses índices criados:
> CREATE INDEX IND_CTAREC_COD_CLIENTE ON CTAREC (COD_CLIENTE);
> CREATE INDEX IND_CTAREC_PAGO ON CTAREC (PAGO);
> CREATE INDEX IND_CTAREC_DELETADO ON CTAREC (DELETADO);
> CREATE INDEX IND_CTAREC_VENCIMENTO ON CTAREC (VENCIMENTO);
> CREATE DESCENDING INDEX IND_CTAREC_VENCIMENTOD ON CTAREC (VENCIMENTO);
> CREATE INDEX IND_CTAREC_DATA_PGTO ON CTAREC (DATA_PGTO);
> CREATE DESCENDING INDEX IND_CTAREC_DATA_PGTOD ON CTAREC (DATA_PGTO);
> CREATE INDEX IND_CTAREC_DATA_COLETA ON CTAREC (DATA_COLETA);
> CREATE DESCENDING INDEX IND_CTAREC_DATA_COLETAD ON CTAREC (DATA_COLETA);
> CREATE INDEX IND_VALORES_CLIENTE_COD_**CLIENTE ON
> VALORES_CLIENTE(COD_CLIENTE);
> CREATE INDEX IND_FAR_MTR_COD_CLIENTE ON FAT_MTR (COD_CLIENTE);
>
>
> Em 02/08/2012 23:02, Zottis escreveu:
>
>  select C.COD_CLIENTE,
>>
>> coalesce(
>>
>> (select sum(CR.saldo) from ctarec CR where CR.COD_CLIENTE = :COD_CLIENTE
>> and
>> CR.Pago = 'N' and CR.deletado = 'N' ),0) as TotalaPagar ,
>>
>>
>> coalesce(
>>
>> (select sum(CR.VALOR + CR.VLR_JUROS + CR.DESPESAS_EXTRAS - CR.DESCONTO)
>> from
>> ctarec CR where CR.COD_CLIENTE = :COD_CLIENTE and CR.deletado = 'N'),0) as
>> TotalContas ,
>>
>>
>> coalesce(
>>
>> (select sum(CR.saldo) from ctarec CR where CR.COD_CLIENTE = :COD_CLIENTE
>> and
>> CR.Pago = 'N' and CR.vencimento >= current_date and CR.deletado = 'N' ),0)
>> as TotalAbertas,
>>
>>
>> coalesce(
>>
>> (select sum(CR.saldo) from ctarec CR where CR.COD_CLIENTE = :COD_CLIENTE
>> and
>> CR.Pago = 'N' and CR.vencimento < current_date and CR.deletado = 'N' ),0)
>> as
>> TotalVencidas,
>>
>>
>> coalesce(
>>
>> (select Count(CR.COD_CONTA) from ctarec CR where CR.COD_CLIENTE =
>> :COD_CLIENTE and CR.Pago = 'S' and
>>
>> CR.Data_Pgto <= CR.Vencimento and CR.deletado = 'N' ),0) as NoPontuais,
>>
>>
>> coalesce(
>>
>> (Select count(CR.COD_CONTA) FROM Ctarec cr where
>>
>>    CR.COD_CLIENTE = :COD_CLIENTE and CR.Pago = 'S' and CR.deletado = 'N'
>> ),0)
>> as NoCtasPagas,
>>
>>
>> coalesce(
>>
>> (Select Count(CR.COD_CONTA) FROM Ctarec cr where
>>
>> CR.COD_CLIENTE = :COD_CLIENTE and CR.Pago = 'S' and CR.DATA_PGTO >
>> CR.VENCIMENTO and CR.deletado = 'N' ),0) as NoAtrasoPorcento,
>>
>>
>> coalesce(
>>
>> (select Sum(CR.DIAS_ATRASO) from Ctarec cr where
>>
>> CR.COD_CLIENTE = :COD_CLIENTE and CR.Pago = 'S' and CR.deletado = 'N' ),0)
>> as AtrasoDias,
>>
>>
>> coalesce(
>>
>> (select count(CR.COD_CONTA) from Ctarec cr where
>>
>> CR.COD_CLIENTE =  :COD_CLIENTE and CR.Pago = 'N' and CR.deletado = 'N'
>> ),0)
>> as NoCtasNaoPagas,
>>
>>
>> coalesce(
>>
>> (select count(CR.COD_CONTA) from ctarec CR where CR.COD_CLIENTE =
>> :COD_CLIENTE and CR.Pago='N' and CR.vencimento >= current_date and
>> CR.deletado = 'N' ),0) as NoNaovencidas,
>>
>>
>> coalesce(
>>
>> (select count(CR.COD_CONTA) from ctarec CR where CR.COD_CLIENTE =
>> :COD_CLIENTE and CR.Pago = 'N' and CR.vencimento < current_date and
>> CR.deletado = 'N' ),0) as noVencidas,
>>
>>
>>      min(F.Data_Coleta) as Primeira_Coleta,
>>
>>      max(F.Data_Coleta) as ultima_Coleta,
>>
>>
>> coalesce(
>>
>> (select first 1(V.codigo) from valores_cliente V where V.cod_cliente =
>> :COD_CLIENTE) ,0) as COD_VALOR
>>
>>
>>
>> from clientes C
>>
>> left join Far_Mtr  F on C.cod_cliente = F.cod_cliente
>>
>> left join ctarec r   on c.cod_cliente = r.cod_cliente
>>
>>
>> where C.deletado = 'N' and C.cod_cliente = :COD_CLIENTE
>>
>> group by C.cod_cliente
>>
>
>
> ______________________________**________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/**artigo.php?id=1107<http://www.firebase.com.br/fb/artigo.php?id=1107>
> Para consultar mensagens antigas: http://firebase.com.br/**pesquisa<http://firebase.com.br/pesquisa>
>



-- 
Analista-Programador
#FollowMe: @felipearon <http://twitter.com/felipearon> (
http://felipearon.net)



Mais detalhes sobre a lista de discussão lista