jcn-costing-test.sql
application/octet-stream
Filename: jcn-costing-test.sql
Type: application/octet-stream
Part: 0
Message:
Re: WIP: BRIN multi-range indexes
create unlogged table iot (
id bigint generated by default as identity primary key,
num double precision not null,
create_dt timestamptz not null,
stuff text generated always as (md5(id::text)) stored
)
with (fillfactor = 95);
insert into iot (num, create_dt)
select random(), x
from generate_series(
'2020-01-01 0:00'::timestamptz,
'2020-01-01 0:00'::timestamptz +'20000000 seconds'::interval,
'2 seconds'::interval) x;
create index cd_multi on iot using brin(create_dt timestamptz_minmax_multi_ops);
vacuum analyze iot;
explain analyze select *
from iot
where create_dt >= '2020-02-01 0:00' and create_dt < '2020-03-01 0:00';
create index cd_single on iot using brin(create_dt);
vacuum analyze iot;
explain analyze select *
from iot
where create_dt >= '2020-02-01 0:00' and create_dt < '2020-03-01 0:00';
drop index cd_single;
-- delete first month and hi/lo values to create some holes in the table
delete from iot
where create_dt < '2020-02-01 0:00'::timestamptz;
delete from iot
where num < 0.05
or num > 0.95;
vacuum iot;
-- add add back first month, but with double density (1s step rather
-- than 2s) so it spills over into other parts of the table, causing more
-- block ranges to have a lower bound with this month.
insert into iot (num, create_dt)
select random(), x
from generate_series(
'2020-01-01 0:00'::timestamptz,
'2020-01-31 23:59'::timestamptz,
'1 second'::interval) x;
vacuum analyze iot;
explain analyze select *
from iot
where create_dt >= '2020-02-01 0:00' and create_dt < '2020-03-01 0:00';
create index cd_single on iot using brin(create_dt);
vacuum analyze iot;
explain analyze select *
from iot
where create_dt >= '2020-02-01 0:00' and create_dt < '2020-03-01 0:00';