-- int2 check CREATE TABLE int2tmp (a int2); \copy int2tmp from 'data/int2.data' SET enable_seqscan=on; SELECT count(*) FROM int2tmp WHERE a < 237; count ------- 297 (1 row) SELECT count(*) FROM int2tmp WHERE a <= 237; count ------- 298 (1 row) SELECT count(*) FROM int2tmp WHERE a = 237; count ------- 1 (1 row) SELECT count(*) FROM int2tmp WHERE a >= 237; count ------- 249 (1 row) SELECT count(*) FROM int2tmp WHERE a > 237; count ------- 248 (1 row) SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3; a | ?column? -----+---------- 237 | 0 232 | 5 228 | 9 (3 rows) SET client_min_messages = DEBUG1; CREATE INDEX int2idx ON int2tmp USING gist ( a ); DEBUG: building index "int2idx" on table "int2tmp" serially DEBUG: using sorted GiST build CREATE INDEX int2idx_b ON int2tmp USING gist ( a ) WITH (buffering=on); DEBUG: building index "int2idx_b" on table "int2tmp" serially DROP INDEX int2idx_b; RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM int2tmp WHERE a < 237::int2; count ------- 297 (1 row) SELECT count(*) FROM int2tmp WHERE a <= 237::int2; count ------- 298 (1 row) SELECT count(*) FROM int2tmp WHERE a = 237::int2; count ------- 1 (1 row) SELECT count(*) FROM int2tmp WHERE a >= 237::int2; count ------- 249 (1 row) SELECT count(*) FROM int2tmp WHERE a > 237::int2; count ------- 248 (1 row) EXPLAIN (COSTS OFF) SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3; QUERY PLAN ------------------------------------------------ Limit -> Index Only Scan using int2idx on int2tmp Order By: (a <-> '237'::smallint) (3 rows) SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3; a | ?column? -----+---------- 237 | 0 232 | 5 228 | 9 (3 rows)