From: | Gourav Kumar <gourav1905(at)gmail(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | fabriziomello(at)gmail(dot)com, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Robert Haas <robertmhaas(at)gmail(dot)com> |
Subject: | Re: Disable cross products in postgres |
Date: | 2017-10-13 22:19:57 |
Message-ID: | CAPzqDmg=s0q4dSAOF+woGNht3xb8drOEfr2SsRwp46mTu9MLQw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
But then is there some way to tell Optimizer not to consider transitive
joins ?
Or to know if the join is transitive or not ?
On 14-Oct-2017 3:43 AM, "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Gourav Kumar <gourav1905(at)gmail(dot)com> writes:
> > For e.g. I am checking for this query
> > ...
> > where
> > and ss1.ca_county = ss2.ca_county
> > and ss2.ca_county = ss3.ca_county
> > and ss1.ca_county = ws1.ca_county
> > and ws1.ca_county = ws2.ca_county
> > and ws1.ca_county = ws3.ca_county
>
> > It doesn't has a join predicate between ss1 and ws2 or ss1 and ws3. But
> > optimizer still considers a join among them.
>
> Sure it does, after transitive propagation of those equalities;
> for instance we can derive ss1.ca_county = ws2.ca_county from
> the above-quoted conditions. And it would be very stupid of the
> optimizer not to consider those derived join conditions, because
> they may lead to the optimal join order.
>
> In general it's already true that the optimizer doesn't consider
> clauseless joins unless there's no other choice. But this example
> isn't showing such a case.
>
> regards, tom lane
>
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2017-10-13 22:27:04 | Re: Continuous integration on Windows? |
Previous Message | Tom Lane | 2017-10-13 22:13:22 | Re: Disable cross products in postgres |