Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Daniel_Ribeiro

relacionamento de tabelas

Recommended Posts

Pessoal, tenho uma duvida que sempre me intriga.. Na verdade nem eh um problema, e sim duas maneiras diferentes de fazer a mesma coisa, porem nao sei realmente qual é a melhor maneira de se fazer tomando por conta a performance do banco. Preciso fzer um select com relacionamento entre 2 tabelas.Bom.. vou citar aqui os 2 exemplos para vcs analizarem:Exemplo 1;

SELECT * FROM itens, pedidos WHERE pedidos.id = itens.id_pedido AND pedidos.id = 1

Exemplo 2:

SELECT * FROM itens INNER JOIN pedidos ON pedidos.id = itens.id_pedido WHERE pedidos.id = 1

Ambas queries acima produzem o mesmo resultado, porem me pegunto.. Em questao de performance, qual a melhor a ser utilizada? Ou é tdo a mesma coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguns preferem utilizar o INNER outros preferem utilizar WHERE, ou os 2 combinados.

Dependendo de como a consulta é montada o resultado será o mesmo.

Então montando com INNER ou WHERE neste caso teria o mesmo resultado.

Eu utilizo muito INNER tipo:

SELECT *

FROM tabela A

INNER JOIN outratabela B ON B.codio = A.codigo

INNER JOIN maistabela C ON C.tipo = B.TIPO

WHERE

A.codigo = 150

Mas poderia escrever:

SELECT *

FROM tabela A, outratabela B, maistabela C

WHERE

C.tipo = B.tipo AND

B.codigo = A.codigo AND

A.codigo = 150

O importante é você montar estas consultas sempre visando a composição de um índice da esquerda para a direita. No caso do índice conter vários campos.

Tipo o seu exemplo, pode-se utilizar o AND no ON também:

SELECT * FROM itens INNER JOIN pedidos ON pedidos.id = itens.id_pedido AND pedidos.id = 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se cabe acrescentar aqui, mas o que faz a diferença é a ordem como a query é executada, por exemplo:

 

SELECT * FROM tabela    WHERE categoria = 1		AND subcategoria = 2

Neste caso serão primeiro filtrados todos os registros com subcategoria igual a 2, e depois categoria igual a 1.

 

Isto sim fará um grande diferença dependendo da modelagem das tabelas ou resultado esperado da query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entre usar inner join com ON ou soh o WHEREnão tem mta diferença pois o WHERE faz o inner joino q vai mudar em relação a desempenho, foi como o wallace falou, eh a ordem os campos que você filtrao JOIN eh melhor utilizado com você tem mais de 2 tabelas para se comparar e faz o uso de left ou right join para melhorar o desempenho

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.