PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

SQL JOIN in PostgreSQL - Piano di esecuzione diverso nella clausola WHERE rispetto alla clausola ON

Grazie per le tue idee, se aggiungiamo un indice come

CREATE INDEX t3_t1_nr ON t3(t1_nr);

la dichiarazione "BAD" migliorerà un po'.

Ma la soluzione finale per noi è stata aumentare le statistiche raccolte per queste tabelle:

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;

Dopo questa modifica, entrambi i SELECT hanno più informazioni sullo stesso tempo di esecuzione. Maggiori informazioni sono disponibili qui:https://www.postgresql.org/docs/12/planner-stats.html