Skip to content

Instantly share code, notes, and snippets.

@x4m
Created April 21, 2017 16:46
Show Gist options
  • Save x4m/744997c2844b8c3c3ce1f4884afbf94c to your computer and use it in GitHub Desktop.
Save x4m/744997c2844b8c3c3ce1f4884afbf94c to your computer and use it in GitHub Desktop.
\timing
create table r as
select int4range(g, g+10) ir, g g
from generate_series(1,1000000) g
order by random();
create index r_idx on r using gist (ir);
create table s as
select int4range(g+5, g+15) ir,g g
from generate_series(1,1000000) g
order by random();
create index s_idx on s using gist (ir);
vacuum analyze r;
vacuum analyze s;
--baseline performance using GiST
set enable_mergejoin=false;
explain analyze
select * from r, s where r.ir && s.ir;
explain analyze
select * from r, s where r.ir && s.ir;
--performance without GiST
set enable_mergejoin=true;
explain analyze
select * from r, s where r.ir && s.ir;
explain analyze
select * from r, s where r.ir && s.ir;
--performance in presence of expression index
create index r_idx1 on r(int4range(r.g, r.g+10));
create index s_idx1 on s(int4range(s.g+5, s.g+15));
explain analyze
select * from r, s where int4range(r.g, r.g+10) && int4range(s.g+5, s.g+15);
explain analyze
select * from r, s where int4range(r.g, r.g+10) && int4range(s.g+5, s.g+15);
--performance in precence of direct B-tree index
create index r_idx2 on r(ir);
create index s_idx2 on s(ir);
explain analyze
select * from r, s where r.ir && s.ir;
explain analyze
select * from r, s where r.ir && s.ir;
drop table r;
drop table s;
--here we test that performance is not affected by payload of other attributes in heap tuples
create table r as
select int4range(g, g+10) ir, g g, 1::float pl1,1::float pl2,1::float pl3,1::float pl4,1::float pl5,1::float pl6,1::float pl7,1::float pl8,1::float pl9,1::float pl0
from generate_series(1,1000000) g
order by random();
create table s as
select int4range(g+5, g+15) ir,g g, 1::float pl1,1::float pl2,1::float pl3,1::float pl4,1::float pl5,1::float pl6,1::float pl7,1::float pl8,1::float pl9,1::float pl0
from generate_series(1,1000000) g
order by random();
explain analyze
select r.ir,s.ir from r, s where r.ir && s.ir;
explain analyze
select r.ir,s.ir from r, s where r.ir && s.ir;
drop table r;
drop table s;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment