在PostgreSQL中,对于单列上的btree索引查询,我们看到的都是普通的索引扫描Index Scan,比如下面这样:
bill=# explain select * from t1 where c1=10;
QUERY PLAN
--------------------------------------------------------------------
Index Scan using idx_t1 on t1 (cost=0.15..10.73 rows=10 width=12)
Index Cond: (c1 = 10)
(2 rows)
对于多个单列索引是用在组合查询SQL中的场合下,我们可以看到使用的是bitmap scan,例如:
bill=# create index idx_t11 on t1 using btree(c1);
CREATE INDEX
bill=# create index idx_t12 on t1 using btree(c2);
CREATE INDEX
bill=# create index idx_t13 on t1 using btree(c3);
CREATE INDEX
bill=# explain select * from t1 where c1 =10 and c2 =20 and c3 = 30;
QUERY PLAN
-----------------------------------------------------------------------------
Bitmap Heap Scan on t1 (cost=3.31..4.62 rows=1 width=12)