Como uma junção entre duas tabelas é realmente executada por um mecanismo de banco de dados?
Tenho certeza de que listar uma tupla em relação a todas as tuplas da outra tabela não pode ser a maneira de realizar a junção; é apenas uma maneira de entender como será a saída. Caso contrário, para duas tabelas contendo 1.000 tuplas cada, uma junção prepararia um conjunto de dados intermediário de 1.000*1.000 tuplas! Isso é difícil de acreditar.
Existem várias maneiras, dependendo do que o DBMS pensa que você deseja versus o que é ajudado no banco de dados.
Existem muitas variações desses três métodos que variam de RDBMS para RDBMS e os bancos de dados comerciais mais caros têm dezenas de otimizações sutis que serão usadas dependendo das circunstâncias.
Meu entendimento: vamos considerar duas tabelas, A e B (o relacionamento é um para muitos). JOIN cria uma tabela temporária com os campos solicitados de A e B. Para cada linha de B, junto com os campos solicitados da tabela B, acrescenta os campos necessários da linha da tabela A cuja chave primária é igual à chave estrangeira de B.
Pena que isso são apenas meus pensamentos, então eles podem não ser o que você está procurando.
Bem, se você não tiver um filtro adicional instalado, o conjunto de dados de 1.000 * 1.000 linhas é o que você pediu.
No entanto, se você tiver condições adicionais, a estratégia usada dependerá dessas condições. Não haverá uma resposta geral para sua pergunta.
O PostgreSQL, por exemplo, usa três estratégias diferentes para JOINs, dependendo da situação. Você pode ler sobre eles aqui .
Você pode obter as informações de qual estratégia é escolhida emitindo sua consulta precedida por um
EXPLAIN
, comoObservar essa saída geralmente fornece dicas valiosas sobre como melhorar a consulta reformulando sua condição de forma que uma estratégia de junção mais poderosa seja escolhida.