I update the example:















*create table product_availabilities(product_id integer, start_date date,
end_date date);     insert into product_availabilities(product_id,
start_date, end_date)     select a, '2018-01-01', '2018-05-03' from
generate_series(1,15000000) as a            alter table
product_availabilities add column during daterange;        update
product_availabilities set during = daterange(start_date, end_date);
CREATE INDEX idx_time ON product_availabilities USING gist(during);
explain analyze SELECT product_id, start_date, end_date, during    FROM
product_availabilities    WHERE during @> daterange('2018-02-01',
'2018-04-01')*
Query plan:












*Bitmap Heap Scan on product_availabilities  (cost=33728.79..236086.04
rows=878500 width=26) (actual time=2775.058..5792.842 rows=15000000
loops=1)  Recheck Cond: (during @> '[2018-02-01,2018-04-01)'::daterange)
Heap Blocks: exact=31040 lossy=79255  ->  Bitmap Index Scan on idx_time
(cost=0.00..33509.17 rows=878500 width=0) (actual time=2767.262..2767.262
rows=15000000 loops=1)        Index Cond: (during @>
'[2018-02-01,2018-04-01)'::daterange)Planning time: 0.063 msExecution time:
6408.456 ms SELECT product_id, start_date, end_date, during    FROM
product_availabilities    WHERE during @> daterange('2018-02-01',
'2018-04-01')*
returns  query runtime
*: 2min*

Reply via email to