Re: Removing unneeded self joins

From: Andrei Lepikhov <lepihov(at)gmail(dot)com>
To: Alexander Korotkov <aekorotkov(at)gmail(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Alena Rybakina <a(dot)rybakina(at)postgrespro(dot)ru>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Robert Haas <robertmhaas(at)gmail(dot)com>, Richard Guo <guofenglinux(at)gmail(dot)com>, Alexander Lakhin <exclusion(at)gmail(dot)com>, "Gregory Stark (as CFM)" <stark(dot)cfm(at)gmail(dot)com>, Michał Kłeczek <michal(at)kleczek(dot)org>, Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com>
Subject: Re: Removing unneeded self joins
Date: 2025-03-07 06:03:53
Message-ID: 9c951cf8-6876-4f0f-9c22-44181e6fda78@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 26/2/2025 13:14, Alexander Korotkov wrote:
> On Mon, Feb 24, 2025 at 2:22 PM Andrei Lepikhov <lepihov(at)gmail(dot)com> wrote:
>> On 24/2/2025 11:57, Alexander Korotkov wrote:
>>> Could you, please, elaborate more on what you mean by "new technique
>>> of query tree reduction"?
>> I mean any transformations and optimisations that reduce search space
>> for optimisation. Right now, I see the features reduce_unique_semijoins,
>> remove_useless_joins, and remove_useless_self_joins.
>> In practice, I see at least a join on a foreign key, where some cases
>> potentially allow the removal of the JOIN operator.
>
> Do you mean some generic facility, which generalizes all the
> transformations you mentioned? If so, it would be cool. But how
> could it look like?
I think we may realise what it may look like by attempting to implement
more RelOptInfo-removal features. Right now, I have only vague ideas on
that subject. Just for reference, there were other discussions on join
removal [1 - 5] and some blog posts explaining Oracle techniques in this
area - see, for example, [6].

[1] inner join removal
https://www.postgresql.org/message-id/flat/AANLkTinS_MlZ2F3Siwgcje--qf5nTJTpuHFnZdcA45bU%40mail.gmail.com
[2] Patch to support SEMI and ANTI join removal
https://www.postgresql.org/message-id/flat/CAApHDvpCBEfuc5tD%3DvniepAv0pU5m%3Dq%3DfOQZcOdMHeei7OQPgQ%40mail.gmail.com
[3] Removing INNER JOINs
https://www.postgresql.org/message-id/flat/CAApHDvocUEYdt1uT+DLDPs2xEu=v3qJGT6HeXKonQM4rY_OsSA(at)mail(dot)gmail(dot)com#CAApHDvocUEYdt1uT+DLDPs2xEu=v3qJGT6HeXKonQM4rY_OsSA@mail.gmail.com
[4] WIP Join Removal
https://www.postgresql.org/message-id/flat/1220176372.4371.118.camel%40ebony.2ndQuadrant
[5] Join Removal/ Vertical Partitioning
https://www.postgresql.org/message-id/flat/1214477827.3845.87.camel%40ebony.site
[6] Oracle Join Elimination
https://oracle-base.com/articles/misc/join-elimination

--
regards, Andrei Lepikhov

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message wenhui qiu 2025-03-07 06:22:54 Trigger more frequent autovacuums
Previous Message Michael Paquier 2025-03-07 05:42:13 Re: per backend WAL statistics