none
Duvidas performance em queries RRS feed

  • Pergunta

  • Gostaria de tirar umas duvidas em termo de performance.

    O que é melhor numa query fazer JOIN - INNER JOIN

    select a.*,b.*

    from tabelaa a inner join tabelab b on a.x=b.x

     

     , ou fazer um:

    select a.*,b.*

    from tabelaa a, tabelab b

    where a.x=b.x

    quinta-feira, 1 de setembro de 2011 14:51

Respostas

  • Acredito que em questão de performance não será o uso do * ou do INNER JOIN que trará diferença vísivel ao usuário....

    Eu sempre utilizava * , mas em consultas com muitas relações de tabela a leitura dos relacionamentos ficava um pouco confuso, desde então utilizo o LITERAL INNER por ter uma visão de leitura melhor....

     

    mas voltando a performance nao vejo problema e distinção dos dois, o fato mais importante são as colunas relacionadas e uso do Count(*) , Average, Order by que realmente alteram a performance

     

    Veja este post do nosso amigo Gustavo Maia, tem esta questão do * ou INNER e tem mitos do SQL onde tb fala sobre count(*) ou Count(1) é bem legal de ler...

    http://gustavomaiaaguiar.wordpress.com/category/mitos-do-sql-server/

     

     

    abcs


    Isco Sistemas José Luiz Borges
    • Marcado como Resposta Igor Auler quinta-feira, 1 de setembro de 2011 15:17
    quinta-feira, 1 de setembro de 2011 15:03
  • Igor,

     

    Não ha diferença, voce esta escrevendo de maneira diferentes, mas por traz o DBEngine ira executar a segunda query exatamente igual como a primeira, saiba que nós só escrevermos as query, mas quem as interpreta e executa é o DbEngine, e é justamente isso que faz um SGBD se diferenciar do outro.

     

    Em relação ao * comentado pelo jose, acredito que em seu topico foi apenas de exemplo, mas sim, o * é menos performatico pois faz mais I/O por que precisa visitar o dicionario de dados para pesquisar as colunas possiveis, ao dizer quais são as colunas, voce esta "eliminando" esse step. Alem de que, caso voce utilize soluções como replicação por exemplo, cuja qual acrescenta uma coluna em cada tabela publicada, voce tera problemas com o *.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    • Marcado como Resposta Igor Auler quinta-feira, 1 de setembro de 2011 15:58
    quinta-feira, 1 de setembro de 2011 15:17
    Moderador

Todas as Respostas

  • Acredito que em questão de performance não será o uso do * ou do INNER JOIN que trará diferença vísivel ao usuário....

    Eu sempre utilizava * , mas em consultas com muitas relações de tabela a leitura dos relacionamentos ficava um pouco confuso, desde então utilizo o LITERAL INNER por ter uma visão de leitura melhor....

     

    mas voltando a performance nao vejo problema e distinção dos dois, o fato mais importante são as colunas relacionadas e uso do Count(*) , Average, Order by que realmente alteram a performance

     

    Veja este post do nosso amigo Gustavo Maia, tem esta questão do * ou INNER e tem mitos do SQL onde tb fala sobre count(*) ou Count(1) é bem legal de ler...

    http://gustavomaiaaguiar.wordpress.com/category/mitos-do-sql-server/

     

     

    abcs


    Isco Sistemas José Luiz Borges
    • Marcado como Resposta Igor Auler quinta-feira, 1 de setembro de 2011 15:17
    quinta-feira, 1 de setembro de 2011 15:03
  • Igor,

     

    Não ha diferença, voce esta escrevendo de maneira diferentes, mas por traz o DBEngine ira executar a segunda query exatamente igual como a primeira, saiba que nós só escrevermos as query, mas quem as interpreta e executa é o DbEngine, e é justamente isso que faz um SGBD se diferenciar do outro.

     

    Em relação ao * comentado pelo jose, acredito que em seu topico foi apenas de exemplo, mas sim, o * é menos performatico pois faz mais I/O por que precisa visitar o dicionario de dados para pesquisar as colunas possiveis, ao dizer quais são as colunas, voce esta "eliminando" esse step. Alem de que, caso voce utilize soluções como replicação por exemplo, cuja qual acrescenta uma coluna em cada tabela publicada, voce tera problemas com o *.


    Fabrizzio A. Caputo
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    • Marcado como Resposta Igor Auler quinta-feira, 1 de setembro de 2011 15:58
    quinta-feira, 1 de setembro de 2011 15:17
    Moderador
  • Obrigado José!!! irei ler


    Eu prefiro utilizar a clausula wheer do que o inner join acho q fica mais visual! mais facil de entender
    quinta-feira, 1 de setembro de 2011 15:17