Otimizando performance de queries - Tuning de Joins

O objetivo dessa matéria será estudar a fundo o funcionamento de joins no SQL Server 2000.

Clique aqui para ler esse artigo em PDF.

Clique aqui para ler todos os artigos desta edição

Otimizando performance de queries

Tuning de joins

por Paulo Ribeiro

Leitura obrigatória: SQL Magazine 19, Estatísticas de Distribuição de Dados no SQL Server 2000.

Ao escrever um join estamos informando ao otimizador quais são as colunas que desejamos visualizar e qual a lógica que deve ser empregada no relacionamento entre as tabelas. A não ser que utilizemos hints, não induzimos o otimizador a utilizar um plano de Nested Loop quando a opção inicial seria utilizar um Hash Join. Em outras palavras, ao escrever uma query não informamos como o otimizador deverá processar a query; deixamos a cargo dele a escolha do melhor plano.

O objetivo dessa matéria será estudar a fundo o funcionamento de joins no SQL Server 2000. Começaremos com os tipos básicos de join utilizados em queries (inner, left, right, full e o cross join). No decorrer do artigo a discussão será ampliada para dicas de tuning de queries, com foco sobre os modelos físicos de join (nested loop, merge e hash).

O que existe de comum entre a teoria dos conjuntos e os tipos de join

Lembram-se da velha teoria dos conjuntos? Pois os cinco tipos de join existem para reproduzir no mundo dos SGBD´s relacionais os modelos matemáticos que regem essa teoria.

Para explicar as diferenças existentes entre inner join, left join, right join, full outer join e cross join, vou fazer um paralelo com a teoria dos conjuntos. Considere a união (AB) entre os conjuntos A={1,2,3,4} e B={4,5,6,7}, cuja representação gráfica pode ser visualizada na Figura 1.

 

 

Figura 1. Representação gráfica da união entre os conjuntos A e B (AB).

 

Dando continuidade a nossa analogia, poderíamos transpor o conjunto A para a tabela de nome tab_A, o mesmo acontecendo para o conjunto B, que assumiria tab_B. O script da Listagem 1 irá criar e popular as duas tabelas.

 

Listagem 1. Script para criar e popular as tabelas.

use NorthWind

go

 

create table tab_a (elemento tinyint primary key clustered)

create table tab_b (elemento tinyint primary key clustered)

 

insert into tab_a values (1)

insert into tab_a values (2)

insert into tab_a values (3)

insert into tab_a values (4)

 

insert into tab_b values (4)

insert into tab_b values (5)

insert into tab_b values (6)

insert into tab_b values (7)

"
[...] continue lendo...
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados