Ruben Fitó escribió: > Tengo la siguiente query en postgresql que tiene un coste de casi un minuto: > > EXPLAIN > SELECT > mtx.oper_tipus, > mtx.oper_estat > FROM > m_transaccions mtx > INNER JOIN comm_pax_transactions pax ON (mtx.num_operacio = pax.num_oper) > WHERE > mtx.estacio = 333 > AND mtx.oper_tipus IN ('F', 'f', 'P', 'p') > AND mtx.oper_estat IN (0, 1) > AND mtx.num_operacio > > *COALESCE( ( SELECT num_oper_end FROM > m_closures WHERE station = 333 ORDER BY id DESC > LIMIT 1 ), 0 )*;
¿Probaste extrayendo el num_oper_end en una CTE? WITH oper_end AS (select num_oper_end from m_closures ...) select ... from m_transaccions inner join comm_pax_transactions ... where mtx.num_operacio > coalesce( select bla from oper_end, 0); Mira el explain y en caso de que Postgres decida volver el CTE como parte de la consulta principal, prueba poniéndole MATERIALIZED al WITH oper_end. -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/