
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