Qual a principal diferença no CROSS JOIN e o INNER JOIN [RESOLVIDO]

6 respostas
M

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?

6 Respostas

M

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

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

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

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

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

Devido a grande velocidade atual dos processadores a forma de indices utilizadas pelas máquinas é quase impreceptível.

:wink:

abrass

Criado 18 de janeiro de 2011
Ultima resposta 18 de jan. de 2011
Respostas 6
Participantes 5