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 acontecia....Num 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 <rosiva...@...> 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 <francisco.porfi...@...>: > > 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]