Re: Costes en subconsulta sencilla

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/

In response to

Browse pgsql-es-ayuda by date

  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