test.sh
application/x-shellscript
#!/bin/sh
t=tmm
power=7
table_count=$( echo "select count(*) from information_schema.tables where table_schema = 'public' and table_name = '$t'" | psql -qtAX );
if [[ 1 -eq 0 || $table_count -eq 0 ]]; then
echo "
drop table if exists $t ;
create table $t as
select i,
cast(random() * 10^${power} as integer) as r
-- from generate_series(1, 10000 ) as f(i) ;
-- from generate_series(1, 1000000 ) as f(i) ;
-- from generate_series(1, 5000000 ) as f(i) ;
from generate_series(1, 50000000 ) as f(i) ;
analyze $t;
-- table $t limit 5;
create index ${t}_minmax_idx on $t using minmax (r);
analyze $t;
" | psql -Xa
# else
# echo "table_count [$table_count] ( $t )"
fi
diff2=100
diff3=1000
diff4=10000
i1=$( echo "select cast(random() * 10^${power} as integer) " | psql -qtAX );
# i2=$( echo "select cast(random() * 10^${power} as integer) " | psql -qtAX );
i2=$(( $i1 + $diff2 ));
i3=$(( $i1 + $diff3 ));
i4=$(( $i1 + $diff4 ));
echo $i1
echo " + $diff2"
echo " + $diff3"
echo " + $diff4"
# echo -ne "$i1\n$i2\n$i3\n" | perl -MTie::Comma -ne 'print $comma{ $_ }'
(
echo "set enable_bitmapscan = 1; explain analyze select * from $t where r between $i1 and $i2; -- + $diff2";
echo "set enable_bitmapscan = 0; explain analyze select * from $t where r between $i1 and $i2; -- + $diff2";
# echo "set enable_bitmapscan = 1; explain analyze select * from $t where r between symmetric $i1 and $i2; -- + $diff2";
# echo "set enable_bitmapscan = 0; explain analyze select * from $t where r between symmetric $i1 and $i2; -- + $diff2";
echo "set enable_bitmapscan = 1; explain analyze select * from $t where r between $i1 and $i3; -- + $diff3";
echo "set enable_bitmapscan = 0; explain analyze select * from $t where r between $i1 and $i3; -- + $diff3";
echo "set enable_bitmapscan = 1; explain analyze select * from $t where r between $i1 and $i4; -- + $diff4";
echo "set enable_bitmapscan = 0; explain analyze select * from $t where r between $i1 and $i4; -- + $diff4";
) | psql -qaX