Qual a principal diferença no CROSS JOIN e o INNER JOIN [RESOLVIDO]
6 respostas
M
moacirjava
Pelo que sei, o cross join (,) é o cruzamento de todas as linhas da tabela, daí surgiu a seguinte dúvida:
Dados estes exemplos, há alguma diferença no custo de execução de cada sentença?
SELECT * FROM tabela1, tabela2 WHERE tabela1.cod = tabela2.cod
SELECT * FROM tabela1 INNER JOIN tabela2 ON tabela1.cod = tabela2.cod
Tipo, o select executa mais rápido com inner join?
pelo que eu sei é a mesma coisa (eu não sou nenhum DBA, mas que eu saiba o banco substitui um pelo outro antes de executar)… abre a sua IDE preferida pro banco que você esta usando, testa ai com as tabelas que você esta indo selecionar…
P
Priuli
tb ñ sou dba tb.
Pelo que já ouvi falar o correto é usar o JOIN pois o banco foi preparado para utilizar JOIN, quando vc faz a query tudo no where o banco converte para o JOIN e depois executa aumentando o tempo do que simplemeste executar(join).
Outra coisa é caso vc precise passar o INNER JOIN para LEFT JOIN é facil é só alterar, porem se a query tiver só no WHERE vc tera que converter para o uso do JOIN, tendo que fazer a query novamente. (apesar que no oracle vc consegue fazer left join simplesmente colocando o + na condição do cross join)
M
moacirjava
Então, eu pensei no seguinte, não sei se é o certo, mas quando vc coloca tabela1,tabela2 vc está fazendo um produto cartesiano entre todas as linhas e só no WHERE você filtra. Já utilizando o INNER JOIN você já filtra os dados antes do WHERE através da cláusula ON. Essa é minha opinião e só queria uma confirmação se estou certo ou não…
H
heroijapa
Sim, sua opnião está certa e tem certos wheres q vc pode colocar no join (como AND) e fica mais rápido ainda dependendo se houverem muitas tabelas ligadas
tipo liando tabela a, b e c
select * from a
inner join b
on a.b = b.codigo
and b.active = true
inner join c
on b.c = c.codigo
neste caso o C só é ligado quando o b for ligado, acelera o select, ganhei uns 5 mins em uma SQL (de 15 mins) por causa de tips como esse
M
moacirjava
heroijapa:
Sim, sua opnião está certa e tem certos wheres q vc pode colocar no join (como AND) e fica mais rápido ainda dependendo se houverem muitas tabelas ligadas
tipo liando tabela a, b e c
select * from a
inner join b
on a.b = b.codigo
and b.active = true
inner join c
on b.c = c.codigo
neste caso o C só é ligado quando o b for ligado, acelera o select, ganhei uns 5 mins em uma SQL (de 15 mins) por causa de tips como esse
Isso mesmo. Hoje eu fiz uma dessas, refatorei uma sql que tinha vários CROSS JOIN (,) mas ganhei só 1 seg. de diferença.
A
AlissonSchneider
Devido a grande velocidade atual dos processadores a forma de indices utilizadas pelas máquinas é quase impreceptível.