Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #75252
    gregorymig
    Participante

      E ae pessoal,
      não tenho muita experiência com Oracle e gostaria de esclarecer algumas dúvidas…
      Qual a diferença de performance usando JOIN ou WHERE??

      PQ com ambas posso retornar o mesmo resultado.

      O Where não usa o índice para a pesquisa?

      Valew! =D

      #75257
      ebertfm
      Participante

        Gregory, Tudo bem?

        Este é um assunto muito extenso. Toda a parte de performance é muito extensa para ser discutida com uma resposta simples.

        Pelo que vc disse vc está notando diferenças entre as duas queries escritas de forma diferente para um mesmo resultado.

        Isso depende de inúmeros fatores: Para citar somente alguns:

        -A versão do banco (por incrível que pareça cada versão funciona de forma diferente).
        -Se as tabelas estão analisadas ou não;
        -Se as estatísticas estão atualizadas;
        -Se os índices estão analisados;
        -A parametrização do banco ( ex. parâmetro optmizer_mode);
        – Etc.Etc.etc.etc.etc.etc.etc.etc……

        Portanto vc vê que não é tão simples.

        Pelo que vc está perguntando vc esta fazendo uma query que vc faz um join de algumas tabelas de duas formas diferentes (uma utilizando a cláusula JOIN, outra fazendo a comparação no WHERE).

        Respondendo à parte simples da sua pergunta:

        “O Where não usa o índice para a pesquisa? “

        Não é muito por aí. O Banco vai usar um índice para resolver um select dependendo dos fatores acima.

        O que pode estar acontecendo é a forma como vc está escrevendo e ele está indo por caminhos diferentes.

        Pela forma como vc escreveu, parece que com a sintaxe utilizando o where está pior. Portanto vc pode ver o que está acontecendo fazendo o trace dos dois comandos e assim comparando para ver o que aconteceu. Assim vc pode verificar se de uma forma está utilizando o índice e da oura não está.

        Uma forma simples para verificar como ele está executando cada query seria: (na versão 9.2 do banco e com a plan_table criada e pelo SQL*Plus):

        SQL> select * from teste;

         CHAVE CAMPOA     CAMPOB
        

             1 a          a
             2 b          a
             3 b          a
             4 b          a
             5 c          a
        

        [b]Execution Plan

        0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=32)
        1 0 TABLE ACCESS (FULL) OF ‘TESTE’ (Cost=2 Card=1 Bytes=32)

        [/b]
        SQL>

        Espero ter ajudado.

        Abraços.

        #75258
        ebertfm
        Participante

          Me desculpe faltou o comando para ligar o trace do SQL*Plus:

          Antes de executar o comando que vc quer ver como ele resolveu faça:

          SQL> set autotrace on

          #75263
          gregorymig
          Participante

            No momento não tenho como fazer o teste, foi apenas uma pergunta…
            Sendo q já usei tanto join qto where…
            Mas muito obrigado pelo esclarecimento. Agora que vou começar a trabalhar mais com oracle e vou escrever mais por aqui!

            Valew mesmo! =)

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress