Tom Lane wrote:
>I think the problem was that he had
>
> select ... from a, b full join c on ... where ...
>
>where table b is big and you only need a few rows from it, so it really
>needs to be joined last, but the above forced doing it first. It wasn't
>clear to me why he wanted the full join at all (in fact, you could see
>from the plan that the planner had been able to reduce it to a left join
>because there were WHERE clauses that'd discard one set of null-extended
>rows anyway). Without knowing that, it's hard to say whether there's
>another way to get what he wants.
>
>
>
Without the outer join, the output was missing the joined rows from a
and b when there was no matching row in c. (Tables a and c both
referenced b.)
I suppose I could have used a left join instead of a full join, but
either way the results were much slower than an inner join, and I was
able to redo some other logic to let an inner join work just fine.