Re: Disable cross products in postgres

From: Gourav Kumar <gourav1905(at)gmail(dot)com>
To: fabriziomello(at)gmail(dot)com
Cc: Robert Haas <robertmhaas(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Disable cross products in postgres
Date: 2017-10-13 20:54:27
Message-ID: CAPzqDmjRyd1zby9d0zH2-HrNgLV-vZFd9N9qxXvoBB3hvB2LXA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

For e.g. I am checking for this query

with ss as
(select ca_county,d_qoy, d_year,sum(ss_ext_sales_price) as store_sales
from store_sales,date_dim,customer_address
where ss_sold_date_sk = d_date_sk
and ss_addr_sk=ca_address_sk
group by ca_county,d_qoy, d_year),
ws as
(select ca_county,d_qoy, d_year,sum(ws_ext_sales_price) as web_sales
from web_sales,date_dim,customer_address
where ws_sold_date_sk = d_date_sk
and ws_bill_addr_sk=ca_address_sk
group by ca_county,d_qoy, d_year)
select /* tt */
ss1.ca_county
,ss1.d_year
,ws2.web_sales/ws1.web_sales web_q1_q2_increase
,ss2.store_sales/ss1.store_sales store_q1_q2_increase
,ws3.web_sales/ws2.web_sales web_q2_q3_increase
,ss3.store_sales/ss2.store_sales store_q2_q3_increase
from
ss ss1
,ss ss2
,ss ss3
,ws ws1
,ws ws2
,ws ws3
where
ss1.d_qoy = 1
and ss1.d_year = 2000
and ss1.ca_county = ss2.ca_county
and ss2.d_qoy = 2
and ss2.d_year = 2000
and ss2.ca_county = ss3.ca_county
and ss3.d_qoy = 3
and ss3.d_year = 2000
and ss1.ca_county = ws1.ca_county
and ws1.d_qoy = 1
and ws1.d_year = 2000
and ws1.ca_county = ws2.ca_county
and ws2.d_qoy = 2
and ws2.d_year = 2000
and ws1.ca_county = ws3.ca_county
and ws3.d_qoy = 3
and ws3.d_year =2000
and case when ws1.web_sales > 0 then ws2.web_sales/ws1.web_sales else
null end
> case when ss1.store_sales > 0 then ss2.store_sales/ss1.store_sales
else null end
and case when ws2.web_sales > 0 then ws3.web_sales/ws2.web_sales else
null end
> case when ss2.store_sales > 0 then ss3.store_sales/ss2.store_sales
else null end
order by web_q2_q3_increase;

It's a TPC-DS benchmark query.
It doesn't has a join predicate between ss1 and ws2 or ss1 and ws3. But
optimizer still considers a join among them.

On 14 October 2017 at 02:20, Gourav Kumar <gourav1905(at)gmail(dot)com> wrote:

> I tried debugging the code, at no point in execution the function
> make_rels_by_clauseless_joins was called. Although optimizer did
> consider some of the joins which are cross products.
>
> On 14 October 2017 at 01:57, Gourav Kumar <gourav1905(at)gmail(dot)com> wrote:
>
>> Can I use something like joininfo, which will store the join predicates
>> and I can check if there is no join predicate among the two relations don't
>> consider them.
>>
>> On 14 October 2017 at 01:48, Fabrízio de Royes Mello <
>> fabriziomello(at)gmail(dot)com> wrote:
>>
>>>
>>> On Fri, Oct 13, 2017 at 5:08 PM, Robert Haas <robertmhaas(at)gmail(dot)com>
>>> wrote:
>>> >
>>> > On Fri, Oct 13, 2017 at 4:06 PM, Gourav Kumar <gourav1905(at)gmail(dot)com>
>>> wrote:
>>> > > Can you guide me where to look for it?
>>> >
>>> > Search for make_rels_by_clauseless_joins.
>>> >
>>>
>>> I wonder if it's possible implement it as an extension using some hook
>>>
>>> --
>>> Fabrízio de Royes Mello
>>> Consultoria/Coaching PostgreSQL
>>> >> Timbira: http://www.timbira.com.br
>>> >> Blog: http://fabriziomello.github.io
>>> >> Linkedin: http://br.linkedin.com/in/fabriziomello
>>> >> Twitter: http://twitter.com/fabriziomello
>>> >> Github: http://github.com/fabriziomello
>>>
>>
>>
>>
>> --
>> Thanks,
>> Gourav Kumar
>> Computer Science and Automation
>> Indian Institute of Science
>>
>
>
>
> --
> Thanks,
> Gourav Kumar
> Computer Science and Automation
> Indian Institute of Science
>

--
Thanks,
Gourav Kumar
Computer Science and Automation
Indian Institute of Science

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2017-10-13 21:36:45 Re: Improve catcache/syscache performance.
Previous Message Gourav Kumar 2017-10-13 20:50:01 Re: Disable cross products in postgres