Re: [firebase-br] AJUDA - SELECT CAUSANDO LENTIDÃO NO BANCO
MagnoS
magnoscosta em bol.com.br
Seg Ago 28 12:41:10 -03 2006
Joga ele no PLSQL e veja o plano que ele esta usando para as tabelas
envolvidas, veja se alguma nao esta sendo acessada "Full", caso isso
aconteca, force uma perquisa pelo index.
Se vc nao manja.. abre um Test Window ou SQl tanto faz..acho q ai vc tem q
pegar um test devido as variáveis..
da um F5 e analisa o resultado...
O resultado deve ser algo assim:
SELECT STATEMENT, GOAL = RULE Cost=347 Cardinality=10000 Bytes=1050000
VIEW Object owner=FULANO Cost=347 Cardinality=10000 Bytes=1050000
SORT ORDER BY Cost=347 Cardinality=10000 Bytes=1930000
FILTER
SORT GROUP BY Cost=347 Cardinality=10000 Bytes=1930000
FILTER
HASH JOIN Cost=37 Cardinality=10000 Bytes=1930000
TABLE ACCESS BY INDEX ROWID Object owner=FULANO Object name=CFGENTI
Cost=2 Cardinality=20 Bytes=1060
INDEX RANGE SCAN Object owner=FULANO Object
name=IFK_NCDVEENTI_CFGENTI Cost=1 Cardinality=100
HASH JOIN Cost=34 Cardinality=10000 Bytes=1400000
>>>> TABLE ACCESS FULL Object owner=FULANO Object name=CONCONT Cost=3
>>>> Cardinality=20 Bytes=300
MERGE JOIN CARTESIAN Cost=30 Cardinality=10000 Bytes=1250000
HASH JOIN OUTER Cost=20 Cardinality=5 Bytes=560
TABLE ACCESS BY INDEX ROWID Object owner=FULANO Object
name=FINTITU Cost=6 Cardinality=5 Bytes=455
INDEX RANGE SCAN Object owner=FULANO Object name=IND_DEMISTITU
Cost=2 Cardinality=9
VIEW Object owner=FULANO Cost=13 Cardinality=5 Bytes=105
SORT GROUP BY Cost=13 Cardinality=5 Bytes=345
FILTER
HASH JOIN Cost=9 Cardinality=5 Bytes=345
TABLE ACCESS BY INDEX ROWID Object owner=FULANO Object
name=FINMVTI Cost=6 Cardinality=5 Bytes=215
INDEX RANGE SCAN Object owner=FULANO Object
name=IND_DDATAMVTI Cost=2 Cardinality=1
>>> TABLE ACCESS FULL Object owner=FULANO Object name=FINOPER
>>> Cost=2 Cardinality=2000 Bytes=52000
BUFFER SORT Cost=30 Cardinality=2000 Bytes=26000
TABLE ACCESS FULL Object owner=FULANO Object name=CFGGERA Cost=2
Cardinality=2000 Bytes=26000
SORT GROUP BY NOSORT Cost=2 Cardinality=1 Bytes=34
FILTER
TABLE ACCESS BY INDEX ROWID Object owner=FULANO Object name=FINTITU
Cost=2 Cardinality=1 Bytes=34
INDEX UNIQUE SCAN Object owner=FULANO Object name=PK_FINTITU Cost=1
Cardinality=100
SORT GROUP BY NOSORT Cost=2 Cardinality=1 Bytes=34
FILTER
TABLE ACCESS BY INDEX ROWID Object owner=FULANO Object name=FINTITU
Cost=2 Cardinality=1 Bytes=34
INDEX UNIQUE SCAN Object owner=FULANO Object name=PK_FINTITU Cost=1
Cardinality=100
Veja nos dois destaques q eu dei (>>>>) q tenho 2 tabelas com acesso full,
se elas forem pequenas nao tem problema, mas se forem tabelas extensas ai
complica.
Para vc forçar o index é só for a Tabela.CampoIndex > 0 nos filtros de
pesquisa.
E tb sugiro entras nessa comunidade: oracle_br em yahoogrupos.com.br
pode ser que ajude.
Abraços Magno
----- Original Message -----
From: "Edilene Baldim Ribeiro" <edcamp74 em hotmail.com>
To: <lista em firebase.com.br>
Sent: Monday, August 28, 2006 10:52 AM
Subject: [firebase-br] AJUDA - SELECT CAUSANDO LENTIDÃO NO BANCO
Olá pessoal.
O DBA da empresa que trabalho nos passou esse "select" dizendo que está
causando muita lentidão no banco.
Já estudei a linha de código mas não estou conseguindo visualizar nenhuma
mudança de melhoria.
Se alguém puder me ajudar desde já agradeço muito.
select:
SELECT espe_evt_cod esp_princ,
DECODE (a.espe_evt_cod,
99999999, a.exame,
DECODE (NVL (b.pcdm_grup_espe_cod, -1), -1, 10014, a.exame)
) proced,
a.exame
FROM hist_exame a,
pcdm_pcm b,
espe_esp f
WHERE :pr_local_id IS NULL
AND a.mes_ref BETWEEN TO_DATE (:pr_mes_ref, 'mm/yyyy')
AND TO_DATE (:pr_mes_ref2, 'mm/yyyy')
AND a.grp_emp_id = :pr_grp_emp_id
AND a.prest_id = :pr_prest_id
AND a.vlr_pago > 0
AND b.pcdm_cod(+) = a.exame
AND f.espe_cod(+) = a.exame
UNION
SELECT espe_evt_cod esp_princ,
DECODE (a.espe_evt_cod,
99999999, a.exame,
DECODE (NVL (b.pcdm_grup_espe_cod, -1), -1, 10014, a.exame)
) proced,
a.exame
FROM hist_exame a,
pcdm_pcm b,
pred_prt_edr c,
tiep_prt_edr_tip d,
recf_fxa_cep_rgi e,
espe_esp f
WHERE :pr_local_id IS NOT NULL
AND a.mes_ref BETWEEN TO_DATE (:pr_mes_ref, 'mm/yyyy')
AND TO_DATE (:pr_mes_ref2, 'mm/yyyy')
AND a.grp_emp_id = :pr_grp_emp_id
AND a.prest_id = :pr_prest_id
AND a.vlr_pago > 0
AND b.pcdm_cod(+) = a.exame
AND f.espe_cod(+) = a.exame
AND c.pred_prtd_cod = a.prest_id
AND d.tiep_pred_cod = c.pred_cod
AND d.tiep_tip_edr = 3
AND e.recf_etor_cod = :pr_etor_cod
AND e.recf_rgio_cod = :pr_local_id
AND e.recf_cepf_cep_ini <= c.pred_cepe_cod
AND e.recf_cepf_cep_fim >= c.pred_cepe_cod
GROUP BY espe_evt_cod, a.exame, b.pcdm_grup_espe_cod, f.espe_cod
ORDER BY 1 ASC
_________________________________________________________________
O Windows Live Spaces é seu espaço na internet com fotos (500 por mês), blog
e agora com rede social http://spaces.live.com/
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista