Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE TABLE test(a int);
- CREATE OR REPLACE FUNCTION is_odd(a int)
- RETURNS boolean AS
- $$
- BEGIN
- RETURN a % 2 = 0;
- END;
- $$
- LANGUAGE 'plpgsql' IMMUTABLE STRICT
- CREATE OR REPLACE FUNCTION is_odd_int(a int)
- RETURNS int AS
- $$
- BEGIN
- RETURN a % 2;
- END;
- $$
- LANGUAGE 'plpgsql' IMMUTABLE STRICT
- insert into test(a) values(1)
- insert into test(a) values(2)
- create index test_is_odd on test USING btree(is_odd(a));
- create index test_is_odd_int on test USING btree(is_odd_int(a));
- set enable_seqscan=false;
- set enable_bitmapscan=false;
- CREATE OR REPLACE FUNCTION is_odd(a int)
- RETURNS boolean AS
- $$
- BEGIN
- perform pg_sleep(0.5);
- RETURN a % 2 = 0;
- END;
- $$
- LANGUAGE 'plpgsql' IMMUTABLE STRICT
- CREATE OR REPLACE FUNCTION is_odd_int(a int)
- RETURNS int AS
- $$
- BEGIN
- perform pg_sleep(0.5);
- RETURN a % 2;
- END;
- $$
- LANGUAGE 'plpgsql' IMMUTABLE STRICT
- explain analyse
- select * from test where is_odd(a) = true; -- 500ms
- explain analyse
- select * from test where is_odd(a) = false; -- 500ms
- explain analyse
- select * from test where is_odd_int(a) = 0; -- 0ms
- explain analyse
- select * from test where is_odd_int(a) = 1; -- 0ms
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement