Muito interessante as dicas!!
Obrigado!
From: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] On
Behalf Of jlchiappa
Sent: quinta-feira, 26 de novembro de 2009 18:16
To: oracle_br@yahoogrupos.com.br
Subject: [oracle_br] Re: Performance IS NULL
Bem, na verdade não sei se pode se chamar de gambiarra, já que o fato do índice
b*tree no bd Oracle não indexar valores nulos é padrão, é uma característica
técnica documentada e sempre presente, não é nem de longe bug que precise de
work-around nem nada assim... Bom, quanto ao problema em questão, acho que
antes de sair indexando a pessoa TEM que :
1. saber a cardinalidade,ie, QUANTOS registros tem esse cara nulo e quantos não
e
2. extrair o plano de execução real 9e estatísticas de execução, I/Os, tempos,
etc) dos SQLs com e sem o and coluna is null
Digo isso porque (já que o colega lá optou por Não nos dar a query nem a
estrutura) de repente pode ser que já haja um índice excelente, e talvez a
query estava sendo satisfeita só com acesso ao índice, MAS com a adição da
coluna a mais (que o otimizador ** sabe ** que jamais vai estar no índice por
ser nula) passou a ser necessária uma visita aos blocos da tabela, o que antes
não aconteciaNum caso desses, Pode Ser que o novo índice de função seja
menos eficiente que o índice ideal que já tínhamos antes... E Mais, tanto Pode
Ser que os nulls sejam poucos (aí realmente valeria a pena indexar quem é
nulo), Quanto pode ser que os nulls sejam muitos muitos, aí talvez valha mais a
pena indexar quem NÃO é nulo (via índice de função que retorna valor só pros
não nulos), ou até optar por um table scan ... vareia, ok ? Só o colega que
formulou a pergunta tem os dados TODOS na mão, é mais ou menos como eu falei na
minha apresentação de CBO - a pessoa TEM que conhecer os dados dela, o ambiente
dela, pra só aí poder usar o Otimizador na eficiência máxima...
[]s
Chiappa
--- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> ,
Rosivaldo Ramalho escreveu
>
> Em geral se cria um índice baseado em função (usando nvl), e no select
> se utilza a função que você utilizou no índice (where nvl(coluna)..).
>
> Se você já tem um índice na coluna, você pode atualizar os valores
> nulos para um valor que esteja fora da regra do teu negócio, algo no
> ano de 1800/1700, dá um rebuild no índice e pode continuar com o
> select normal, só passando agora essa nova data no lugar do IS NULL.
>
> Essas duas formas são meio que gambiarras, mas eu desconheço outras.
>
> 2009/11/26 francisco porfirio :
> > Boa Tarde Pessoal.
> >
> > Tenho uma consulta que está demorando devido a utilização do IS NULL.(Segue
> > parte da consulta)
> >
> > ...
> > and campo_timestamp is null
> > ...
> > Sei que quando isso é feito não adianta criar um índice para o campo
> > testado.
> > Alguem sabe uma outra forma de capturar os campos que são nulos sem perder
> > tanto a performance?
> >
> >
> > Versão do Oracle: 10.2.0.4.0
> > --
> > Atenciosamente
> > Francisco Porfirio Ribeiro Neto
> >
> >
> > [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/
> > <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/ <http://www.oraclebr.com.br/>
> > -- Links do Yahoo!
> > Grupos
> >
> >
> >
>
>
>
> --
> Rosivaldo Azevedo Ramalho
> Consultor Oracle Database / Application Server
> mail/msn: rosiva...@...
> mobile: +55 83 8893 8281
> Oracle Database 10g Certified Professional
> Oracle Application Server 10g Certified Professional
>
[As partes desta mensagem que não continham texto foram removidas]