PostgreSQL optimization: average over range of dates
|
QUERY PLAN |
1 |
Function Scan on generate_series days (cost=0.00..41003.45 rows=1000 width=40) (actual time=5.831..489.503 rows=123 loops=1) |
2 |
SubPlan 1 |
3 |
-> Aggregate (cost=40.98..40.99 rows=1 width=32) (actual time=3.975..3.975 rows=1 loops=123) |
4 |
-> Bitmap Heap Scan on temperatures (cost=4.46..40.98 rows=1 width=32) (actual time=0.374..3.920 rows=75 loops=123) |
5 |
Recheck Cond: (site_id = 1) |
6 |
Filter: ((date_part('doy'::text, "timestamp") >= (date_part('doy'::text, days.days) - '7'::double precision)) AND (date_part('doy'::text, "timestamp") <= (date_part('doy'::text, days.days) + '7'::double precision))) |
7 |
Rows Removed by Filter: 1779 |
8 |
Heap Blocks: exact=4920 |
9 |
-> Bitmap Index Scan on temperatures_pkey (cost=0.00..4.46 rows=23 width=0) (actual time=0.184..0.184 rows=1854 loops=123) |
10 |
Index Cond: (site_id = 1) |
11 |
Planning time: 0.382 ms |
12 |
Execution time: 489.638 ms |
|
QUERY PLAN |
1 |
Sort (cost=99.65..99.71 rows=22 width=40) (actual time=3.732..3.741 rows=123 loops=1) |
2 |
Sort Key: days.days |
3 |
Sort Method: quicksort Memory: 34kB |
4 |
CTE p |
5 |
-> Result (cost=0.00..0.01 rows=1 width=16) (actual time=0.000..0.000 rows=1 loops=1) |
6 |
-> Nested Loop (cost=89.63..99.15 rows=22 width=40) (actual time=3.382..3.697 rows=123 loops=1) |
7 |
Join Filter: ((days.days >= p.min) AND (days.days <= p.max)) |
8 |
Rows Removed by Join Filter: 14 |
9 |
-> CTE Scan on p (cost=0.00..0.02 rows=1 width=16) (actual time=0.003..0.003 rows=1 loops=1) |
10 |
-> WindowAgg (cost=89.63..94.13 rows=200 width=40) (actual time=3.359..3.660 rows=137 loops=1) |
11 |
-> Sort (cost=89.63..90.13 rows=200 width=48) (actual time=3.334..3.345 rows=137 loops=1) |
12 |
Sort Key: days.days |
13 |
Sort Method: quicksort Memory: 35kB |
14 |
-> HashAggregate (cost=79.49..81.99 rows=200 width=48) (actual time=3.252..3.284 rows=137 loops=1) |
15 |
Group Key: days.days |
16 |
-> Hash Left Join (cost=40.82..71.99 rows=1000 width=40) (actual time=1.954..2.898 rows=689 loops=1) |
17 |
Hash Cond: (date_part('doy'::text, days.days) = date_part('doy'::text, temperatures."timestamp")) |
18 |
-> Nested Loop (cost=0.01..20.03 rows=1000 width=8) (actual time=0.082..0.120 rows=137 loops=1) |
19 |
-> CTE Scan on p p_1 (cost=0.00..0.02 rows=1 width=16) (actual time=0.000..0.000 rows=1 loops=1) |
20 |
-> Function Scan on generate_series days (cost=0.01..10.01 rows=1000 width=8) (actual time=0.080..0.098 rows=137 loops=1) |
21 |
-> Hash (cost=40.52..40.52 rows=23 width=40) (actual time=1.837..1.837 rows=1854 loops=1) |
22 |
Buckets: 2048 (originally 1024) Batches: 1 (originally 1) Memory Usage: 118kB |
23 |
-> Bitmap Heap Scan on temperatures (cost=4.46..40.52 rows=23 width=40) (actual time=0.151..0.581 rows=1854 loops=1) |
24 |
Recheck Cond: (site_id = 1) |
25 |
Heap Blocks: exact=40 |
26 |
-> Bitmap Index Scan on temperatures_pkey (cost=0.00..4.46 rows=23 width=0) (actual time=0.139..0.139 rows=1854 loops=1) |
27 |
Index Cond: (site_id = 1) |
28 |
Planning time: 0.483 ms |
29 |
Execution time: 3.999 ms |
|
λ
.NET NoSQL database for rapid development
|