sql >> Base de Datos >  >> RDS >> PostgreSQL

SQL JOIN en PostgreSQL:plan de ejecución diferente en la cláusula WHERE que en la cláusula ON

Gracias por tus ideas, si agregamos un índice como

CREATE INDEX t3_t1_nr ON t3(t1_nr);

la declaración "MALO" mejorará un poco.

Pero la solución final para nosotros fue aumentar las estadísticas recopiladas para estas tablas:

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;

Después de este cambio, ambos SELECT tienen más información sobre el mismo tiempo de ejecución. Puede encontrar más información aquí:https://www.postgresql.org/docs/12/planner-stats.html