Olá Nino,

Pelo que vc está falando infelizmente não sei se vc vai ter muito como
trabalhar em cima dessa query, já que o índice já está sendo usado pelo
otimizador. Acho que o principal problema aí é o >=, que leva vc a
selecionar um número muito grande de registros simultaneamente, e isso não
tem mesmo como ser muito rápido. Comprove essa hipótese substituindo >= por
= apenas, e veja se a query fica rápida. Vc também pode experimentar trazer
só as colunas que precisa ao invés de *, mas creio que isso não deve
impactar em muita melhora não...

Em situações como essa, normalmente a melhor saída é mudar a forma como a
rotina que faz essa query trabalha. Praticamente não existe situação onde
você precisa realmente listar para o usuário 120 mil registros...
Normalmente o que acontece são sistemas que usam frameworks de persistência
(como o hibernate para o Java, por exemplo), que fazem queries simples no
banco e realizam todo o processamento em cima destes dados no servidor de
aplicação. Nessa situação, a melhor idéia é passar parte do processamento
para a query, pensando em queries um pouco mais complexas que já trazem
resultados mais resumidos e mastigados para a aplicação. Se vc utilizar,
por exemplo, funções de grupo como SUM ou COUNT (se isso fizer sentido para
a lógica da rotina, claro), isso pode diminuir muito o tempo da query e
ainda diminuir o tempo de processamento no servidor de aplicação. O difícil
é só convencer a equipe de desenvolvimento a utilizar uma query escrita à
mão, fugindo assim da "arquitetura do sistema". Isso é um purismo besta que
sempre leva a problemas de performance. É uma situação recorrente na minha
vida: projetos que não querem nenhum processamento no banco para conseguir
independência em relação à tecnologia do banco, em outras palavras,
balela... Se o cara tá gastando uma grana pra usar Oracle, é burrice cair
em problemas de performance pq não quer escrever uma query à mão...

Na situação mais rara de vc realmente ter que mostrar para o usuário esses
120 mil registros, uma alternativa é trazer os registros de blocos em
blocos (utilizando rownum), partindo do pressuposto que o usuário não vai
conseguir visualizar os 120 mil registros de uma só vez. É a lógica do
youtube, por exemplo, que não espera baixar todo o vídeo para começar a
reproduzi-lo.

Se se tratar de um "export" do banco, uma coisa que em tese é realizada de
tempos em tempos, acho que vc vai ter que amargar nessa lentidão mesmo, e
dar a desculpa de que não tem mesmo como fugir nesses casos... Já trabalhei
importando dados vindos do SAP, e a rotina de export que os caras fizeram
em ABAP demorava mais de 24h para rodar. E olha que não eram tantos dados
assim... Volumes de dados muito grandes trazem grandes reponsabilidades...
kkkkkk

[]s

Marcos


Em 9 de janeiro de 2012 16:39, Nino <ninoba...@gmail.com> escreveu:

> **
>
>
> Srs,
>
> estou executando o seguinte select:
>
> SELECT *
> FROM CN_COMMISSION_HEADERS_ALL D
> WHERE D.PROCESSED_DATE >= ADD_MONTHS(SYSDATE, -6 ) )
>
> e tal consulta está demorando aproximadamente uma hora pra retornar.
>
> a tabela tem índice por este campo PROCESSED_DATE (que é tipo date mesmo) e
> o índice está sendo usado pelo otimizador.
>
> esta tabela tem aproximadamente 25 milhões de registros e o select traz em
> torno de 120 mil registros.
>
> Minha pergunta é:
> esse tempo de execução está dentro do esperado pela quantidade de registros
> envolvida?
> alguém tem uma idéia de algo que eu possa fazer pra melhorar esse tempo?
>
> versao do banco: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
> - 64bi
>
> Muito Obrigado!
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

--------------------------------------------------------------------------------------------------------------------------
>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
>responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------
>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » 
>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
>http://www.oraclebr.com.br/  
------------------------------------------------------------------------------------------------------------------------
 Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a