From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Richard Guo <guofenglinux(at)gmail(dot)com> |
Cc: | David Rowley <dgrowleyml(at)gmail(dot)com>, gourlaouen(dot)mikael(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org |
Subject: | Re: BUG #18627: Regression (15 -> 16) - Join removal not performed when join condition spans multiple tables |
Date: | 2024-09-25 20:33:42 |
Message-ID: | 142165.1727296422@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
I wrote:
> I'm taking a second look at the idea of regenerating the attr_needed
> values altogether. It doesn't look that bad, especially if we cheat
> to the extent of preserving the existing "relation 0" bits (that is,
> tlist and HAVING references). That's fine since we could never
> remove a rel that supplies Vars used in those places.
Here's a finished patch that fixes it along those lines.
I worried that this might have nasty performance impact, so I added
some instr_time calls (not included in patch) to check the runtime of
remove_useless_joins() by itself as well as the overall planner run
time. Using a test case like
SELECT a.id
FROM a
LEFT JOIN b ON a.id = b.id
I found that HEAD takes about 500ns on my machine to run
remove_useless_joins, out of a total planner run time of about 12.5us.
With the patch, it's more like 530ns, but the total planner run time
seems barely different. So I find that totally acceptable, especially
if it helps us find join removals we missed before.
This seems straightforward enough that maybe we could put it into
v16/v17 after all, although I'm still leaning towards not doing so.
To validate the patch, verify that add_vars_to_targetlist is
presently the only function that adds bits to attr_needed or
ph_needed. Then check that for every caller of that function,
I've added parallel code to re-insert those bits (except for
callers that set the "relation 0" bit, which we handle by not
removing that bit in the first place).
Comments?
regards, tom lane
Attachment | Content-Type | Size |
---|---|---|
v1-fix-bug-18627.patch | text/x-diff | 20.0 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Paquier | 2024-09-26 07:01:42 | Re: BUG #18630: Incorrect memory access inside ReindexIsProcessingIndex() on VACUUM |
Previous Message | Tom Lane | 2024-09-25 16:48:01 | Re: BUG #18097: Immutable expression not allowed in generated at |