André e Chiappa, obrigado pela ajuda, problema resolvido.
________________________________ De: J. Laurindo Chiappa <jlchia...@yahoo.com.br> Para: oracle_br@yahoogrupos.com.br Enviadas: Segunda-feira, 18 de Junho de 2012 19:07 Assunto: [oracle_br] Re: Problema perfomance SQL Tá, mas além do índice Existir, ele está sendo usado no Plano de Execução ** real **, que vc tirou das V$ (e não o chute dado por alguma tool cliente) ?? Qual é a chave Completa do índice ?? Mais que isso, é Esperado que o índice seja usado ?? Afinal, cfrme nós sabemos, um índice é útil e deve ser usado SE, e apenas SE, a qtdade de linhas a recuperar for comparativamente MUITO MENOR do que o total da tabela e/ou SE o índice pode ser mais rapidamente scaneado via fast full index scan do que um full table scan..... Isso nos leva à questão de cardinalidades : qual o tamanho total das tabelas envolvidas, E quantas linhas são esperadas nesse antijoin (que é o que eu imagino ser o trecho aonde vc quer saber quem NÃO está no conjunto, que vc codificou com um NOT EXISTS) ??? E o ponto mais importante : será que o que vc está obtendo com o NOT EXISTS é, logicamente falando, um nested loop, ie, CADA linha da query principal é procurada na tabela de lookup, que no seu exemplo seria a arrecadacao.pagamento pagto ? Se for isso, se a tabela de lookup for grande é Claro que operação linha-a-linha é Intrisecamente mais lenta para qtdades não-triviais, vc Tentou "materializar" isso de modo que possa ser feita uma busca geral, talvez com a cláusula WITH, talvez simplesmente se criando uma tabela temporária com os dados ? Numa próxima msg, se vc ainda estiver tendo o problema, mostra pra gente uma versão *** MENOR *** do SELECT em que ainda ocorra o problema (tem que ser uma versão CUSTOMIZADA, aonde vc tirou tudo o desnecessário, ninguém tem tempo pra ficar analisando uma query real de produção com meia dúzia de tabelas), mostra o plano de Execução ** real ** para nós e dê Todos os detalhes de acesso, índices e Cardinalidades, que a gente pode tentar palpitar em cima... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Rafael Vieira <vieira.rafael44@...> escreveu > > André, obrigado pelo retorno. > Respondendo a sua pergunta, tem sim. > > > > > ________________________________ > De: Andre Santos <andre.psantos.ti@...> > Para: oracle_br@yahoogrupos.com.br > Enviadas: Segunda-feira, 18 de Junho de 2012 17:35 > Assunto: Re: [oracle_br] Problema perfomance SQL > > Rafael > > Uma primeira pergunta: na tabela "pagamento" há um índice por "cnta_id"? > > [ ] > > André > > 2012/6/18 vieira.rafael44 <vieira.rafael44@...> > > > ** > > > > > > Amigos, boa tarde. > > Venho aqui pedir uma ajuda de vocês, estou com um probleminha de > > performance na query abaixo: > > > > Obs: O grande problema, é a última condição "AND", onde se usa o "NOT > > EXISTS", sem o "NOT EXISTS" a query roda em 01 min e 36seg. Quanto a > > questão de estatísticas e índice está ok. > > > > SELECT Count(conta.imov_id) AS idImovel > > FROM faturamento.conta conta > > INNER JOIN cadastro.imovel imov > > ON imov.imov_id = conta.imov_id > > INNER JOIN cadastro.localidade loca > > ON loca.loca_id = imov.loca_id > > INNER JOIN cadastro.setor_comercial stcm > > ON stcm.stcm_id = imov.stcm_id > > INNER JOIN cadastro.quadra qdra > > ON qdra.qdra_id = imov.qdra_id > > LEFT OUTER JOIN cobranca.cobranca_situacao cbst > > ON cbst.cbst_id = imov.cbst_id > > WHERE ( imov.cbst_id IS NULL > > OR cbst.cbst_icnaocobranca <> 1 ) > > AND imov.imov_id NOT IN (SELECT cbsh.imov_id > > FROM cobranca.cobranca_situacao_hist cbsh > > WHERE cbsh.imov_id = imov.imov_id > > AND cbsh.cbsh_amcobrancaretirada IS NULL) > > AND imov.imov_icexclusao <> 1 > > AND imov.imov_idcategoriaprincipal IN ( 1, 2, 3 ) > > AND conta.dcst_idatual IN ( 0, 1, 2 ) > > AND loca.greg_id = 44 > > AND imov.iper_id IN ( 1, 3, 4, 5 ) > > AND imov.last_id IN ( 5, 3 ) > > AND conta.cnta_amreferenciaconta BETWEEN 200203 AND 201203 > > AND NOT EXISTS (SELECT pagto.pgmt_id > > FROM arrecadacao.pagamento pagto > > WHERE pagto.cnta_id = conta.cnta_id) > > > > > > > > > [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 > > [As partes desta mensagem que não continham texto foram removidas] > [As partes desta mensagem que não continham texto foram removidas]