postgres=# \d test Table "public.test" Column | Type | Modifiers --------+---------+----------- bit | boolean | but | integer | postgres=# insert into test SELECT (random() < 0.001), generate_series(1,1000000)*random(); INSERT 0 1000000 postgres=# select count(*) from test; count --------- 1010023 <-- ok, I did some other inserts first, same kind of data, 1 in 1000 are 't' (1 row) postgres=# select count(but) from test where bit; count ------- 1049 (1 row) postgres=# explain select but from test where bit limit 1000; QUERY PLAN ----------------------------------------------------------------- Limit (cost=0.00..7451.00 rows=1000 width=4) -> Seq Scan on test (cost=0.00..15051.03 rows=2020 width=4) Filter: "bit" (3 rows) postgres=# create index bits on test(bit); CREATE INDEX postgres=# explain select but from test where bit limit 1000; QUERY PLAN ---------------------------------------------------------------------------- Limit (cost=0.00..62.88 rows=1000 width=4) -> Index Scan using bits on test (cost=0.00..127.02 rows=2020 width=4) Index Cond: ("bit" = true) Filter: "bit" (4 rows)