none
Performance no join RRS feed

  • Pergunta

  • ola!

    tenho 2 tabelas (tb_Estado e tb_DadosFinanceiro)

    onde estas possuem como chave o Estado (UF) 

    uma dela possue apenas 26 estados e 26 registros a outra possui cerca de 300 milhoes de registros

    gostaria de saber se há alteraçao de performance entre as 2 queries abaixo.

    select f.* from tb_Estado e

    inner join tb_DadosFinanceiro f

    on e.UF = F.UF

    ================

    select f.* from tb_DadosFinanceiro f

    inner join tb_Estado e

    on f.UF = e.UF


    quarta-feira, 6 de janeiro de 2016 16:27

Respostas

  • Olá!

          A resposta rápida para a sua pergunta é: Não. Não há diferença para o SQL Server em relação ao JOIN.

          Havia antigamente uma regra que dizia que as tabelas com menos valores deveriam ser citadas primeiro e isso era válido para o SQL (se não me engano) até 2000, mas atualmente o otimizador do SQL entende a query e sabe fazer as consultas nas tabelas na ordem certa.

          O ponto mais importante no seu caso, não é a ordem das tabelas, mas a quantidade de registros retornados. Se você fizer a query recuperando 1 registro ou poucos registros da tabela dados financeiros, a sua query terá boa performance (claro que lembrando que você tem os índices corretos), mas se você filtrar por 1 ou mais de um estado, você recuperará milhares de dados financeiros de cada estado. Por este motivo, verifique bem a sua cláusula WHERE.

          Veja o plano de execução das duas queries rodando e note que o custo é exatamente o mesmo, de 50% em cada query e o plano de execução é igual nas duas execuções.


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    • Sugerido como Resposta Fabricio Lima - MVPMVP quinta-feira, 7 de janeiro de 2016 11:07
    • Marcado como Resposta Marcos SJ quinta-feira, 7 de janeiro de 2016 13:12
    quarta-feira, 6 de janeiro de 2016 20:37
    Moderador

Todas as Respostas

  • Thura123,

    Por gentileza, verifique e considere as seguintes informações:

    Link 01

    Link 02

    Link 03

    "If you perform regular joins between two or more tables in your queries, performance will be optimized if each of the joined columns have their own indexes. This includes adding indexes to the columns in each table used to join the tables. Generally speaking, a clustered key is better than a non-clustered key for optimum JOIN performance. [6.5, 7.0, 2000, 2005] Updated 7-25-2005"

    Espero ter ajudado.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.


    • Editado Marcos SJ quarta-feira, 6 de janeiro de 2016 16:35
    • Sugerido como Resposta FLauffer quarta-feira, 6 de janeiro de 2016 16:41
    quarta-feira, 6 de janeiro de 2016 16:34
  • Olá!

          A resposta rápida para a sua pergunta é: Não. Não há diferença para o SQL Server em relação ao JOIN.

          Havia antigamente uma regra que dizia que as tabelas com menos valores deveriam ser citadas primeiro e isso era válido para o SQL (se não me engano) até 2000, mas atualmente o otimizador do SQL entende a query e sabe fazer as consultas nas tabelas na ordem certa.

          O ponto mais importante no seu caso, não é a ordem das tabelas, mas a quantidade de registros retornados. Se você fizer a query recuperando 1 registro ou poucos registros da tabela dados financeiros, a sua query terá boa performance (claro que lembrando que você tem os índices corretos), mas se você filtrar por 1 ou mais de um estado, você recuperará milhares de dados financeiros de cada estado. Por este motivo, verifique bem a sua cláusula WHERE.

          Veja o plano de execução das duas queries rodando e note que o custo é exatamente o mesmo, de 50% em cada query e o plano de execução é igual nas duas execuções.


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    • Sugerido como Resposta Fabricio Lima - MVPMVP quinta-feira, 7 de janeiro de 2016 11:07
    • Marcado como Resposta Marcos SJ quinta-feira, 7 de janeiro de 2016 13:12
    quarta-feira, 6 de janeiro de 2016 20:37
    Moderador
  • Roberto muito obrigado pela explicação me ajudou bastante, mais ainda pela informação de que antigamente isso até fazia algum sentido mas hoje em dia o otimizador de consulta consegue fazer isso.
    quinta-feira, 7 de janeiro de 2016 21:08