ustify>minha

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.

  ...

Quer ler esse conteúdo completo? Tenha acesso completo