Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

The Queen

Select lento

Recommended Posts

Estava melhorando a performance de um select gigantesco que consulta tabelas com milhões de dados e resolvi fazer um subselect para melhorar a performance e a apresentação do select. estava tudo certo até eu ter que usar a função SUM. O negócio está a 20 min rodando e nada. Alguém tem alguma ídéia pra melhorar a performance deste select?

 

SELECT A.CONTRATO aCONTRATO, SUM(B.PREMIO_PAGO) aPREMIO

FROM BMCTOOLS.PARCELA A

INNER JOIN BMCTOOLS.TB_GENERALI_ENVIADOS B ON A.CONTRATO =

B.CONTRATO

AND A.PARCELA =

B.NUM_PARCELA

WHERE B.CANCELADO = 'N'

AND A.NATUREZA_RCB IN

(SELECT COD_NAT_CANC

FROM BMCTOOLS.TB_GENERALI_COD_NATUREZA)

GROUP BY A.CONTRATO

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) Já viu o plano de execução da QUERY ?

 

2) Para que a subquery se você está buscando todas as naturezas , não seria o caso de se trocar por um << AND A.NATUREZA_RCB IS NOT NULL >> ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 - AQUI ESTÁ

 

SELECT STATEMENT 47098 1 79

SORT GROUP BY 47098 1 79

HASH JOIN SEMI 47095 1 79

MERGE JOIN PARCELA 47093 1 66

TABLE ACCESS BY INDEX ROWID PARCELA_PK 83 45061302 144961664

INDEX FULL SCAN 26 3244 1815

SORT JOIN TB_GENERALI_ENVIADOS 47010 6127234 288325956

TABLE ACCESS FULL TB_GENERALI_COD_NATUREZA 9054 6127234 288325956

TABLE ACCESS FULL 2 15 195

 

2 - NÃO TRAGO TODAS AS NATUREZAS, ELE BUSCA NUMA TABELA QUE TEM SOMENTE AS NATUREZAS DE CANCELAMENTO E ESTE CAMPO NATUREZA_RCB DA TABELA DE PARCELAS TEM PODE CONTER OUTROS TIPOS DE NATUREZAS

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que as estasticas estão atuais.

 

Já tentou mudar o subselect por mais um join , em geral isto é mais rápido.

 

Fora isto não vi muito como melhorar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aparentemente o problema acontece quando tento fazer o subselect na tabela tb_generali_cod_natureza. não importa se eu faço join ou subselect, quando tento acessar os dados desta tabela fica muito lento. deve haver algo para melhorar o acesso a esta tabela já que ela é criada por mim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernanda :

 

Como é uma tabela de tipos deve ter pouco registros por isto o Oracle faz FULL TABLE SCAN.

 

As estatisticas das tabelas são atuais ?

 

Já tentou rodar a query a parte montando o IN na mão ?

 

Exemplo : A query

SELECT COD_NAT_CANC

FROM BMCTOOLS.TB_GENERALI_COD_NATUREZA

 

Retorna

1

2

3

4

5

 

Monte a query

 

SELECT A.CONTRATO aCONTRATO, SUM(B.PREMIO_PAGO) aPREMIO

FROM BMCTOOLS.PARCELA A

INNER JOIN BMCTOOLS.TB_GENERALI_ENVIADOS B ON A.CONTRATO =

B.CONTRATO

AND A.PARCELA =

B.NUM_PARCELA

WHERE B.CANCELADO = 'N'

AND A.NATUREZA_RCB IN

(1,2,3,4,5)

GROUP BY A.CONTRATO

 

E veja se roda mais rápido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não posso fazer isso pois os registros que usarei para a tabela de natureza é dinâmico. mas criei um indice para esta tabela e as estatisticas melhoraram um pouco. também tente colocal manualmente e a performance continuou baixa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei que era dinamico, mas seria só para testar se a demora está no subselect.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criei um monstrinho contra qualquer regra de tunnig aqui. Ele é lento mas roda. Já este é bonitinho e tudo mas não roda. Deixa estar, tento me virar aqui.

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente rodar com os dados do IN escritos na mão (sem o sub-select) para saber se o zebra está no sub-select.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.