Re: [HACKERS] Disable cross products in postgres - Mailing list pgsql-hackers
| From | Gourav Kumar | 
|---|---|
| Subject | Re: [HACKERS] Disable cross products in postgres | 
| Date | |
| Msg-id | CAPzqDmjRyd1zby9d0zH2-HrNgLV-vZFd9N9qxXvoBB3hvB2LXA@mail.gmail.com Whole thread Raw  | 
		
| In response to | Re: [HACKERS] Disable cross products in postgres (Gourav Kumar <gourav1905@gmail.com>) | 
| Responses | 
                	
            		Re: [HACKERS] Disable cross products in postgres
            		
            		 | 
		
| List | 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@gmail.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@gmail.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@gmail.com> wrote:
On Fri, Oct 13, 2017 at 5:08 PM, Robert Haas <robertmhaas@gmail.com> wrote:
>
> On Fri, Oct 13, 2017 at 4:06 PM, Gourav Kumar <gourav1905@gmail.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 Indian Institute of ScienceThanks,Computer Science and Automation
Gourav Kumar--Indian Institute of ScienceThanks,Computer Science and Automation
Gourav Kumar
Thanks,
Gourav Kumar
Computer Science and AutomationGourav Kumar
pgsql-hackers by date: