Re: triple self-join crawling - Mailing list pgsql-sql

From T E Schmitz
Subject Re: triple self-join crawling
Date
Msg-id 45FEB611.8070606@numerixtechnology.de
Whole thread Raw
In response to Re: triple self-join crawling  (T E Schmitz <mailreg@numerixtechnology.de>)
Responses Re: triple self-join crawling  (Martin Marques <martin@bugs.unl.edu.ar>)
List pgsql-sql
T E Schmitz wrote:
> T E Schmitz wrote:
> 
> Things improved hugely when I changed the JOIN clauses:

see explain analyze below - can this be improved further?

> 
> LEFT OUTER JOIN history AS past_month ON (past_month.stock = 
> history.stock        AND past_month.day >= (history.day - 30) AND 
> past_month.day < history.day)
> LEFT OUTER JOIN history AS past_week  ON (past_week.stock   = 
> past_month.stock AND past_week.day  =past_month.day AND past_week.day >= 
> (history.day - 7))

QUERY PLAN
GroupAggregate  (cost=1370368.19..1435888.88 rows=5801 width=56) (actual 
time=11945.030..13163.156 rows=5801 loops=1)  ->  Sort  (cost=1370368.19..1379715.86 rows=3739067 width=56) (actual 
time=11944.753..12462.623 rows=120117 loops=1)        Sort Key: history.stock, history."day", history.high, history.low
      ->  Hash Left Join  (cost=160.02..391554.63 rows=3739067 
 
width=56) (actual time=52.746..3778.409 rows=120117 loops=1)              Hash Cond: ((("outer".stock)::text = 
("inner".stock)::text) AND ("outer"."day" = "inner"."day"))              Join Filter: ("inner"."day" >= ("outer"."day"
-7))              ->  Nested Loop Left Join  (cost=0.00..204441.26 
 
rows=3739067 width=57) (actual time=0.077..2313.375 rows=120117 loops=1)                    Join Filter:
(("inner".stock)::text= 
 
("outer".stock)::text)                    ->  Seq Scan on history  (cost=0.00..131.01 
rows=5801 width=34) (actual time=0.016..34.845 rows=5801 loops=1)                    ->  Index Scan using
idx_history_dayon history 
 
past_month  (cost=0.00..22.32 rows=645 width=23) (actual 
time=0.020..0.185 rows=21 loops=5801)                          Index Cond: ((past_month."day" >= 
("outer"."day" - 30)) AND (past_month."day" < "outer"."day"))              ->  Hash  (cost=131.01..131.01 rows=5801
width=23)
 
(actual time=52.608..52.608 rows=5801 loops=1)                    ->  Seq Scan on history past_week 
(cost=0.00..131.01 rows=5801 width=23) (actual time=0.010..25.110 
rows=5801 loops=1)

Total runtime: 13187.729 ms
-- 


Regards,

Tarlika Elisabeth Schmitz


pgsql-sql by date:

Previous
From: Maya Nigrosh
Date:
Subject: Multiple partition tables and faster queries
Next
From: T E Schmitz
Date:
Subject: Re: triple self-join crawling