inner join x subquery

Tuning de Banco, Tuning de SQL, Ferramentas de tuning
Responder
Avatar do usuário
heraldoaraujo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Dom, 19 Fev 2012 12:10 pm

Boa tarde,

Alguém sabe me dizer qual é mais performático inner join ou uma consulta com subquery?
Obs: irei trazer somente atributos(coluna) da 1° tabela.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Em regra geral seria o próprio join, pois usaria os índices específicos das 2 tabelas.
Mas depende da situação dos dados do banco, dos índices, dos filtros e campos, da quantidade de dados nas duas tabelas.
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

@heraldoaraujo,

Na maior parte das situações o inner join é mais performático, mas é importante ter ciência de que existem sim algumas situações em que é melhor executar uma subquery. Atualmente você nem precisa mais se preocupar muito com isso pois se você escrever uma subquery onde um INNER JOIN seria melhor, o Otimizador realiza uma operação chamada "Subquery Unnesting" (http://docs.oracle.com/cd/B19306_01/ser ... htm#i55054) que transforma a subquery em inner join.

[]s
Avatar do usuário
adrianoturbo
Moderador
Moderador
Mensagens: 393
Registrado em: Qui, 20 Mar 2008 4:09 pm
Localização: Brasília
Adriano Alves
---Para cada problema dificil existe uma solução simples.----

Mais uma vez a cautela pede que se utilize a palavra :depende ,pois cada cenário especifico depende da situação,particularmente utilizo inner join por ser mais performático nas maiorias das situações e em casos extremos de querys complexas o caminho é a subquery mesmo.
Michel Pessoa
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 18 Nov 2013 2:24 pm

Boa noite,

Apenas uma dica com relação a subquery. Evite o "in" e "not in" pois estes não usam índice e dê preferência ao "exists" ou "not exists".

Espero ter ajudado.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes