QUAL DIFEREN?A DESSES DOIS SELECT, IMPLICA EM QUE?
Olá pessoal, vejam os dois Select:
Select a.Produto, a.Descricao, a.CodValor, b.ValorDescricao
From Tabela1 a, Tabela2 b
Where a.CodValor = b.CodValor
Select a.Produto, a.Descricao, a.CodValor, b.ValorDescricao
From Tabela1 a
Inner Join Tabela2 b On a.CodValor = b.CodValor
Ambos os select produzem o mesmo resultado
Qual diferença? um é mais rápido que o outro ou não?
Sei que dependendo do caso precisa usar o Left Join e Right Join que complicaria fazer o mesmo com Where, mas o inner Join?
Select a.Produto, a.Descricao, a.CodValor, b.ValorDescricao
From Tabela1 a, Tabela2 b
Where a.CodValor = b.CodValor
Select a.Produto, a.Descricao, a.CodValor, b.ValorDescricao
From Tabela1 a
Inner Join Tabela2 b On a.CodValor = b.CodValor
Ambos os select produzem o mesmo resultado
Qual diferença? um é mais rápido que o outro ou não?
Sei que dependendo do caso precisa usar o Left Join e Right Join que complicaria fazer o mesmo com Where, mas o inner Join?
A primeira, é um LEFT JOIN, a segunda obviamente é um INNER JOIN. A figura abaixo mostra como isso é:
http://i.stack.imgur.com/VQ5XP.png
http://i.stack.imgur.com/VQ5XP.png
Na minha opinião, na há diferença alguma, tanto em performance quanto na extração dos dados.
Colega,
Fiz medições seguindo o left join, que é implÃcito no primeiro SQL que você postou.
Usei PostGres 9.3 com duas tabelas, sendo a principal com 100.000 (contas) registros e a segunda com aproximadamente 400.000 registros (histórico das contas).
O segundo SQL ganhou por pouco mais de nada, coisa de milessegundos (nem se pode dizer que era na velocidade das Querys porque pode ser algum momento em que o computador tenha sido aliviado de algum procedimento interno).
No PGAdmin III desenhei a query visualmente, ao invés de digitar como sempre faço, para ver qual o modo que o PGAdmin III sugere. Não sei se desenhei corretamente, se inseri os parâmetros corretamente para o builder formar a Query, mas enfim: sugeriu da primeira forma (eu particulamente uso sempre da segunda forma).
Tudo de bom!
Fiz medições seguindo o left join, que é implÃcito no primeiro SQL que você postou.
Usei PostGres 9.3 com duas tabelas, sendo a principal com 100.000 (contas) registros e a segunda com aproximadamente 400.000 registros (histórico das contas).
O segundo SQL ganhou por pouco mais de nada, coisa de milessegundos (nem se pode dizer que era na velocidade das Querys porque pode ser algum momento em que o computador tenha sido aliviado de algum procedimento interno).
No PGAdmin III desenhei a query visualmente, ao invés de digitar como sempre faço, para ver qual o modo que o PGAdmin III sugere. Não sei se desenhei corretamente, se inseri os parâmetros corretamente para o builder formar a Query, mas enfim: sugeriu da primeira forma (eu particulamente uso sempre da segunda forma).
Tudo de bom!
JCM0867,
A diferença entre os dois é bem simples.
No primeiro Select apenas os dados da tabela A serão exibidos. Os dados da tabela B só serão exibidos caso haja correspondência dos campos relacionados. Isso pode resultar num valor NULO para o campo b.Descricao, o que pode ocasionar erros na aplicação.
No segundo Select os dados de ambas as tabelas serão exibidos, se e somente se, ocorrer a correspendência dos campos relacionados.
A diferença entre os dois é bem simples.
No primeiro Select apenas os dados da tabela A serão exibidos. Os dados da tabela B só serão exibidos caso haja correspondência dos campos relacionados. Isso pode resultar num valor NULO para o campo b.Descricao, o que pode ocasionar erros na aplicação.
No segundo Select os dados de ambas as tabelas serão exibidos, se e somente se, ocorrer a correspendência dos campos relacionados.
Citação::
JCM0867,
A diferença entre os dois é bem simples.
No primeiro Select apenas os dados da tabela A serão exibidos. Os dados da tabela B só serão exibidos caso haja correspondência dos campos relacionados. Isso pode resultar num valor NULO para o campo b.Descricao, o que pode ocasionar erros na aplicação.
No segundo Select os dados de ambas as tabelas serão exibidos, se e somente se, ocorrer a correspendência dos campos relacionados.
O dois selects produzem o mesmo resultado.
Mas a pergunta não é essa, quero saber sobre PERFORMACE, usar Joins ou wheres tem o mesmo tempo de resposta?
Por que vocês acham que a primeira é um LEFT JOIN?
Os dois são INNER JOIN, sendo o primeiro implÃcito e o segundo explicito.
Não existe como te dar uma resposta exata afinal você não disse qual banco de dados e versão que está usando, mas eu diria que na maioria dos bancos de dados modernos não faz diferença nenhuma, o que você precisa fazer é verificar o plano de execução das duas SQLs, isso varia de um banco de dados para outro, mas o mais provável é que as duas SQLs gerem exatamente o mesmo plano de execução.
O mais recomendado eu diria que é usar mesmo o modo explicito, pois ele é padronizado pela ANSI e pessoalmente eu acho ele melhor para se ler, pois separa o JOIN da cláusula WHERE.
Não existe como te dar uma resposta exata afinal você não disse qual banco de dados e versão que está usando, mas eu diria que na maioria dos bancos de dados modernos não faz diferença nenhuma, o que você precisa fazer é verificar o plano de execução das duas SQLs, isso varia de um banco de dados para outro, mas o mais provável é que as duas SQLs gerem exatamente o mesmo plano de execução.
O mais recomendado eu diria que é usar mesmo o modo explicito, pois ele é padronizado pela ANSI e pessoalmente eu acho ele melhor para se ler, pois separa o JOIN da cláusula WHERE.
OCELOT, concordo plenamente. Os dois casos são a mesma coisa.
Logico que o exemplos que dei são bastante simples, fiz assim só para explicar a minha duvida.
tenho queres aqui com mais de 15 joins, funcionando 100%, gostaria de saber se valeria apena tirar algumas e substituir por where.
uma vez li não sei onde que o Join só teria boa performance só se forem entre tabelas indexadas
Uso SQL Server express 2014
tenho queres aqui com mais de 15 joins, funcionando 100%, gostaria de saber se valeria apena tirar algumas e substituir por where.
uma vez li não sei onde que o Join só teria boa performance só se forem entre tabelas indexadas
Uso SQL Server express 2014
Se você substituir esses 15 JOINS pela primeira opção, na minha opinião, será como trocar seis por meia dúzia.
Tópico encerrado , respostas não são mais permitidas