mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-11-21 03:13:05 +08:00
Fix an error in make_outerjoininfo introduced by my patch of 30-Aug: the code
neglected to test whether an outer join's join-condition actually refers to the lower outer join it is looking at. (The comment correctly described what was supposed to happen, but the code didn't do it...) This often resulted in adding an unnecessary constraint on the join order of the two outer joins, which was bad enough. However, it also seems to expose a performance problem in an older patch (from 15-Feb): once we've decided that there is a join ordering constraint, we will start trying clauseless joins between every combination of rels within the constraint, which pointlessly eats up lots of time and space if there are numerous rels below the outer join. That probably needs to be revisited :-(. Per gripe from Jakub Ouhrabka.
This commit is contained in:
parent
5c4249c353
commit
3ef18797b8
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/optimizer/plan/initsplan.c,v 1.134 2007/10/04 20:44:47 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/optimizer/plan/initsplan.c,v 1.135 2007/10/24 20:54:27 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -623,6 +623,7 @@ make_outerjoininfo(PlannerInfo *root,
|
||||
* rel in the lower OJ's min_righthand, not its whole syn_righthand.
|
||||
*/
|
||||
if (bms_overlap(left_rels, otherinfo->syn_righthand) &&
|
||||
bms_overlap(clause_relids, otherinfo->syn_righthand) &&
|
||||
!bms_overlap(strict_relids, otherinfo->min_righthand))
|
||||
{
|
||||
min_lefthand = bms_add_members(min_lefthand,
|
||||
|
Loading…
Reference in New Issue
Block a user