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

Left Join Lateral y agregados de matriz

Como @Denis ya comentó:no hay necesidad de LATERAL .Además, su subconsulta seleccionó la columna incorrecta. Esto funciona:

SELECT t1.t1_id, t1.t1_data, t2_ids
FROM   t1
LEFT   JOIN (
    SELECT t1_id, array_agg(t2_id) AS t2_ids
    FROM   t1_t2_rel
    GROUP  BY 1
    ) sub USING (t1_id);

-SQL fiddle.

Rendimiento y pruebas

Con respecto al escaneo secuencial posterior que menciona:si consulta toda la tabla, un escaneo secuencial suele ser más rápido . Depende de la versión que esté ejecutando, su hardware, su configuración y estadísticas de cardinalidades y distribución de sus datos. Experimente con WHERE selectivo cláusulas como WHERE t1.t1_id < 1000 o WHERE t1.t1_id = 1000 y combinar con configuración del planificador para obtener información sobre las opciones:

SET enable_seqscan = off;
SET enable_indexscan = off;

Para restablecer:

RESET enable_seqscan;
RESET enable_indexscan;

¡Solo en tu sesión local, eso sí! Esta respuesta relacionada en dba.SE tiene más instrucciones.
Por supuesto, su configuración también puede estar desactivada: