PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

SQL JOIN no PostgreSQL - Plano de execução diferente na cláusula WHERE do que na cláusula ON


Obrigado por suas ideias, se adicionarmos um índice como
CREATE INDEX t3_t1_nr ON t3(t1_nr);

a declaração "RUIM" vai melhorar um pouco.

Mas a solução final para nós foi aumentar as estatísticas coletadas para essas tabelas:
ALTER TABLE t1 ALTER COLUMN t1_nr SET STATISTICS 10000;
ALTER TABLE t2 ALTER COLUMN t2_nr SET STATISTICS 10000;
ALTER TABLE t3 ALTER COLUMN t1_nr SET STATISTICS 10000;

ANALYZE t1;
ANALYZE t2;
ANALYZE t3;

Após essa alteração, ambos os SELECTs têm mais sobre o mesmo tempo de execução. Mais informações podem ser encontradas aqui:https://www.postgresql.org/docs/12/planner-stats.html