ustify>
Clique aqui para ler todos os artigos desta edição
Mão na Massa
Situações do cotidiano de seu banco de dados
Este espaço é seu, leitor da SQL Magazine. Através desta seção, você pode tirar suas dúvidas referentes às suas atividades cotidianas e nossos especialistas terão prazer em ajudar.
Desta vez, Rodrigo Righetti responde a duas perguntas enviadas pelos leitores e também colaborei com a seção respondendo uma terceira pergunta.
Envie suas questões para webeditor@sqlmagazine.com.br.
Ricardo Rezende
Editor Técnico
Você perguntou!
Olá à SQL Magazine.
Considerando performance, o que é melhor: joins ou subqueries?
Poderia me explicar com um exemplo?
Aproveitando, qual a diferença entre nested loops e hash joins e como determinar qual deles usar para obter uma melhor performance? Um exemplo ajudaria bastante.
Muito obrigado e parabéns pela excelente publicação.
Regiane Almeida Cardoso
E nós respondemos!
Olá Regiane,
Em relação à primeira pergunta, é muito relativo mas, no “geral”, sempre que for possível evitar uma subquery fazendo a junção direta, a performance tende a ser muito melhor.
Em relação aos métodos de junção, existem algumas regras básicas que funcionam na maioria dos casos:
Nested Loops: É ideal se você pretende retornar poucas linhas, ou se é mais importante o retorno das linhas ao invés de processar tudo de uma vez e depois enviar o resultado. Para que ele funcione de forma ideal, a “driven table”, ou tabela controladora, deve ser bem restritiva e o acesso às tabelas internas deve ser feito por índices com boa seletividade.
Esse é o método ideal, via de regra, para telas de consulta, onde o usuário quer receber poucos dados rapidamente. Agora, se não existirem índices com boa seletividade ou não existirem índices, esse método de junção se torna muito custoso.
O Nested Loop funciona da seguinte forma, o Oracle lê a primeira linha da “driven table” e depois verifica na tabela interna a combinação. Esse processo fica em loop até verificar todas as combinações. A Figura 1 apresenta um gráfico demonstrando o seu funcionamento.
Figura 1. Esquema de funcionamento do método Nested Loop.
Merge Join: Neste método de junção, o Oracle irá ordenar as tabelas que serão unidas através das colunas de junção, depois ocorre o “merge” onde ele irá encontrar as combinações.
Esse método só será indicado quando a falta de seletividade ou de índices tornarem a junção Nested Loop ineficiente, ou quando o número de registros é muito grande (maior do que 5% do total de ambas as tabelas). Porém, esse método só poderá ser utilizado em equijoins (junções de igualdade).
Outro detalhe importante é que junções Merge Join irão utilizar segmentos temporários para a ordenação das tabelas, podendo ocorrer gargalos em memória ou disco. A Figura 2 apresenta um gráfico demonstrativo.
...