À mon avis ce n'est pas terrible de mettre le or dans la clause de jointure… (je me demande comment c'est interprété…)
J'écrirais plutôt :
select us.id
from user us
join email esource
on esource.source_id = us.id
union
select ut.id
from user ut
join email etarget
on e.target_id = ut.id
Je pense que là, on a 2 sous-requêtes bien optimisées, et assez peu de temps pour l'union (du moment que chacune des sous-requête ne ramène pas 100 000 000 de lignes…)
[^] # Re: Bah
Posté par Flo . En réponse au message performances de JOIN / EXISTS sur postgres. Évalué à 2.
À mon avis ce n'est pas terrible de mettre le or dans la clause de jointure… (je me demande comment c'est interprété…)
J'écrirais plutôt :
select us.id
from user us
join email esource
on esource.source_id = us.id
union
select ut.id
from user ut
join email etarget
on e.target_id = ut.id
Je pense que là, on a 2 sous-requêtes bien optimisées, et assez peu de temps pour l'union (du moment que chacune des sous-requête ne ramène pas 100 000 000 de lignes…)