"Avec PostgreSQL 17, j'ai une requête (elle est énormément simplifiée) de la forme
Code : Tout sélectionner
select *
FROM
T1
where c1 in (select distinct T2.c1
from T2
where T2.c2 = 'XXX'
and T2.c1 = 'XXX');Les tables sont partitionnée sur c1 mais je lis toutes les partitions de t1, pourquoi ?"
Réponse:
La raison est que "The planner can only push quals down into a subquery, it cannot pull quals from a subquery into the outer query." , cf https://www.postgresql.org/message-id/C ... .gmail.com .
Qu'est-ce que cela signifie ? L'excellent critère T2.c1 = 'XXX" de la sous-requête ne sera pas exécutée pour éliminer des partitions de t1. Il faut donc plutôt écrire par exemple
Code : Tout sélectionner
select *
FROM
T1, (select distinct T2.c1
from T2
where T2.c2 = 'XXX'
) T2 where t1.c1 = t2.c1 and t2.c1 = 'XXX';Code : Tout sélectionner
select *
FROM
T1 join (select distinct T2.c1
from T2
where T2.c2 = 'XXX'
) T2 on (t1.c1 = t2.c1) where t2.c1 = 'XXX';