consulta lenta

65 views
Skip to first unread message

Ricardo Gavira

unread,
Feb 27, 2012, 12:41:23 PM2/27/12
to Comunidade Oracle do Brasil
Olá pessoal, entrei agora no grupo, preciso de uma ajuda.

Estou com uma consulta onde faço um filtro por um campo char(1), e
quando faço esse filtro o tempo de consulta é de pouco mais de 2.2s,
acontece que se eu colocar um coalesce( campo1 , '') = 'B' nesse mesmo
filtro o tempo é de 0,97s.

Mais se eu adicionar mais um outro filtro de um outro campo, por
exemplo char(4), a consulta demora uns 2,6s. Se eu colocar o
coalesce( campo2 , '') = '0001' o tempo vai para 3,9s, em vez de
diminuir igual ao caso do campo1.

O que pode estar acontecendo ??


obrigado pela ajuda.

Tadeu Costa

unread,
Feb 27, 2012, 1:43:29 PM2/27/12
to oracle...@googlegroups.com, ricg...@gmail.com
Ricardo,

   Um ponto que vc deve prestar atenção é que caso o "campo1" seja índice e vc faz uma pesquisa com igualdade nesse campo,
   como vc fez na primeira tentativa,o oracle utilizará o índice, caso ache necessário.
   Quando vc acrescenta uma condição como essa "coalesce( campo1 , '')" que vc utilizou na segunda vez, vc está descartando 
   a possibilidade de busca através do índice, não sei se é esse o caso. 

   Contando que o campo em questão não seja indíce.
   Ao acrescentar mais filtros a sua query e o tempo estar aumentado, provavelmente vc não deve estar levando em 
   consideração a recuperação de todos os registros que satisfizeram o filtro.
   Lembre-se que vc tem que levar em conta o fetch de todos os registros.
  

  







--
Você está recebendo esta mensagem porque se inscreveu no grupo "Comunidade Oracle do Brasil" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para oracle...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para oracle_brasi...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/oracle_brasil?hl=pt-BR.




--
Atenciosamente,

    Tadeu Azevedo da Costa

Ricardo Gavira

unread,
Feb 27, 2012, 1:49:58 PM2/27/12
to Comunidade Oracle do Brasil
Obrigado Tadeu

Existe um índice pelos 2 campos.

Mais mesmo assim, vamos desconsiderar a situação do campo2, utilizando
somente o campo1, sem o coalesce é mais lento e não pega o indice, do
que com o coalesce que pega o indice, e portanto mais rápido.

Porque quando uso o coalesce nesse campo ele pega o indice e quando
não uso ele não pega. Mesmo que eu adicione somente esse campo no
order by continua lento.
Será que tenho que criar um indice unico somente com 1 campo e não com
os 2 campos como está atualmente ?
Obs.: as estatisticas estão atualizadas para melhor performance.


Obrigado pela ajuda




On 27 fev, 15:43, Tadeu Costa <tadeu...@gmail.com> wrote:
> Ricardo,
>
>    Um ponto que vc deve prestar atenção é que caso o "campo1" seja índice e
> vc faz uma pesquisa com igualdade nesse campo,
>    como vc fez na primeira tentativa,o oracle utilizará o índice, caso ache
> necessário.
>    Quando vc acrescenta uma condição como essa "coalesce( campo1 , '')" que
> vc utilizou na segunda vez, vc está descartando
>    a possibilidade de busca através do índice, não sei se é esse o caso.
>
>    Contando que o campo em questão não seja indíce.
>    Ao acrescentar mais filtros a sua query e o tempo estar aumentado,
> provavelmente vc não deve estar levando em
>    consideração a recuperação de todos os registros que satisfizeram o
> filtro.
>    Lembre-se que vc tem que levar em conta o fetch de todos os registros.
>

Zulu

unread,
Feb 27, 2012, 3:58:30 PM2/27/12
to oracle...@googlegroups.com
Use o explain na frente do select. Dae você verá exatamente o que está acontecendo...
Carlos H. N. Treib
Técnico em Informática 
Venâncio Aires - RS
carlo...@gmail.com
(51)9746-0505
Reply all
Reply to author
Forward
0 new messages