PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

SQL JOIN dans PostgreSQL - Plan d'exécution différent dans la clause WHERE que dans la clause ON

Merci pour vos idées, si nous ajoutons un index comme

CREATE INDEX t3_t1_nr ON t3(t1_nr);

la déclaration "MAUVAIS" s'améliorera un peu.

Mais la solution finale pour nous était d'augmenter les statistiques recueillies pour ces tableaux :

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;

Après ce changement, les deux SELECT ont à peu près le même temps d'exécution. Plus d'informations peuvent être trouvées ici :https://www.postgresql.org/docs/12/planner-stats.html