Usuário com melhor resposta
Performance no join

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
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
Todas as Respostas
-
Por gentileza, verifique e considere as seguintes informações:
"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.
-
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
-