Problemas no inner join com subselect no PostgreSQL


O PostgreSQL sempre tenta elevar um "join" com um "subselect " em um "join" simples. Assim, uma consulta do tipo:

SELECT * FROM tabela1 INNER JOIN (
SELECT * FROM tabela2 WHERE tabela2.saldo=1000
) ON tabela1.divida_id = tabela2.divida_id;

É elevada a um INNER JOIN simples assim:

SELECT * FROM tabela1 INNER JOIN tabela2 ON tabela1.divida_id = tabela2.divida_id;

Isso pode ser um problema quando a tabela onde o subselect é executado é muito grande!

Para "forçar" a execução do subselect podemos utilizar um agregador (limit, order by, etc ..) como no exemplo abaixo:

SELECT * FROM tabela1 INNER JOIN (
SELECT * FROM tabela2 WHERE tabela2.saldo=1000 ORDER BY tabeal2.divida_id
) ON tabela1.divida_id = tabela2.divida_id;

0 comentários:

Postar um comentário