From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Ruben Fitó <r(dot)fito(at)ubiquat(dot)com> |
Cc: | Ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Costes en subconsulta sencilla |
Date: | 2024-02-12 18:02:09 |
Message-ID: | 202402121802.tp37asuol7nw@alvherre.pgsql |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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/
From | Date | Subject | |
---|---|---|---|
Next Message | Martin H. Rmz | 2024-02-13 06:47:04 | Re: Postgresql 15 scram y java |
Previous Message | Luis Martínez | 2024-02-12 13:39:33 | Re: Postgresql 15 scram y java |