Qual forma é mais eficiente?

Oi pessoal, se estou querendo fazer uma pesquisa para obter UMA tupla contendo a placa do carro e o nome do dono por exemplo. Devo pesquisar em uma tabela de cada vez ou faço o join?

(uma tabela por vez)
SELECT m.nome FROM motorista m WHERE m.cpf = ?;
SELECT v.placa FROM veiculo v WHERE v.cpf_dono = ?

(com join)
SELECT m.nome, v.placa FROM motorista m INNER JOIN veiculo v ON m.cpf = v.cpf_dono WHERE m.cpf = ?

Se o resultado fosse um conjunto relacionando as placas e os respectivos nomes dos proprietários, não há dúvida de que a segunda forma seria a ideal. Mas no meu caso, eu sei que a query só trará um único resultado, então neste caso, qual é a melhor forma?

Bom não existe nenhuma receita para query na verdade o ideal é sempre estudar/analisar caso a caso, depende muito de como foram gerados os indices se existem e etc.

Mas no chute imagino que o JOIN vá lhe dar uma resposta/performance melhor do que fazer duas queries em separado, mas só testando em algum analyzer da vida para você ter essa resposta principalmente que o que implica em performance é na verdade a longo prazo, quantidade de dados e etc.

[]s

Pode confiar, o join é bem melhor.

Não sei se entendi direito, mas estou com o pessoal ai de cima, o join juntamente com uma boa formação de chaves, respectivos indices e outras particularidades de cada banco sempre vai lhe dar a melhor resposta principalmente neste seu caso; as duas tabelas parecem que estão relacionas pela coluna cpf (provavelmente é a chave primária) numa relação de 1:n então o join é o melhor caminho, vc obterá o resultado em um ÚNICO acesso.

flws

Bem, no meu caso eu tenho chaves primárias compostas (com a PK de uma tabela sendo parte da PK de outra tabela), um modelo que não é bem estruturado.

Já tenho uma pesquisa que faz 3 joins para trazer uma tupla. Daí eu precisava trazer mais um valor para o qual precisaria dar um outer join em mais duas tabelas (com inner join entre si), o que deixaria a SQL cada vez mais pesada e complicada com mais e mais joins em chaves compostas.

Neste caso, o que vocês acham que tende a ser melhor? Joins mesmos por mais complicada que a SQL fique?

rapaz eu prefirira usar com join
porem nao sou mto fan de usar o inner nao, pq ele faz a consulta demorar mais…
use o left join … sempre uso dessa forma e fika td blz

Em um caso simples assim até parece facil não usar join, quero ver fazer isto em 5 tabelas sendo que todas tem um relacionamento 1 - *.

Rode explain nas duas e veja quantas linhas cada uma busca e quais índices elas usam :slight_smile:

Não tem jeito mais fácil de se saber, quem usar menos linhas e os melhores índices vai ser a melhor opção.

rapaz se vc tem 5 tabelas e todas com relacionamento usa left join q fica mara