Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE TABLE test(a int);
  2.  
  3. CREATE OR REPLACE FUNCTION is_odd(a int)
  4.     RETURNS boolean AS
  5. $$
  6. BEGIN    
  7.     RETURN a % 2 = 0;
  8. END;
  9. $$
  10. LANGUAGE 'plpgsql' IMMUTABLE STRICT
  11.  
  12. CREATE OR REPLACE FUNCTION is_odd_int(a int)
  13.     RETURNS int AS
  14. $$
  15. BEGIN    
  16.     RETURN a % 2;
  17. END;
  18. $$
  19. LANGUAGE 'plpgsql' IMMUTABLE STRICT
  20.  
  21. insert into test(a) values(1)
  22.  
  23. insert into test(a) values(2)
  24.  
  25. create index test_is_odd on test  USING btree(is_odd(a));
  26.  
  27. create index test_is_odd_int on test  USING btree(is_odd_int(a));
  28.  
  29. set enable_seqscan=false;
  30.  
  31. set enable_bitmapscan=false;
  32.  
  33. CREATE OR REPLACE FUNCTION is_odd(a int)
  34.     RETURNS boolean AS
  35. $$
  36. BEGIN    
  37.     perform pg_sleep(0.5);
  38.     RETURN a % 2 = 0;
  39. END;
  40. $$
  41. LANGUAGE 'plpgsql' IMMUTABLE STRICT
  42.  
  43. CREATE OR REPLACE FUNCTION is_odd_int(a int)
  44.     RETURNS int AS
  45. $$
  46. BEGIN    
  47.     perform pg_sleep(0.5);
  48.     RETURN a % 2;
  49. END;
  50. $$
  51. LANGUAGE 'plpgsql' IMMUTABLE STRICT
  52.  
  53.  
  54. explain analyse
  55. select * from test where is_odd(a) = true; -- 500ms
  56.  
  57. explain analyse
  58. select * from test where is_odd(a) = false; -- 500ms
  59.  
  60. explain analyse
  61. select * from test where is_odd_int(a) = 0; -- 0ms
  62.  
  63. explain analyse
  64. select * from test where is_odd_int(a) = 1; -- 0ms
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement