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

Bucles anidados de PostgresSQL:¿cuándo decide el planificador utilizar bucles anidados al realizar una UNIÓN INTERNA?

El planificador no decide usar una determinada estrategia de combinación basándose en un razonamiento profundo, simplemente construye todas las estrategias de combinación posibles, estima el costo y elige la más económica.

Dicho esto, las combinaciones de bucles anidados suelen ser la mejor opción si la tabla exterior es pequeña, de modo que el bucle interior no tenga que ejecutarse con frecuencia. Además, un índice sobre la condición de combinación de la tabla interna puede reducir en gran medida el costo de una combinación de bucle anidado y convertirla en una estrategia atractiva.

En tu caso, la mala elección se debe a una mala estimación:

Foreign Scan on wind_forecast_recent w  (cost=... rows=1 ...) (actual ... rows=7 ...)

Eso hace que el ciclo interno se ejecute 7 veces en lugar de una, por lo que el tiempo de ejecución es de 70 segundos en lugar de 10.

Debe recopilar estadísticas de la tabla en wind_forecast_recent :

ANALYZE wind_forecast_recent;

Recuerde que el análisis automático no tratar mesas extranjeras; tienes que encargarte de eso tú mismo.

Si eso no funciona, puede intentar configurar el use_remote_estimate en la tabla externa y asegúrese de que las estadísticas de la tabla sean precisas en la base de datos remota.