本节书摘来自华章出版社《Greenplum企业应用实战》一书中的第3章,第3.5节,作者 何勇 陈晓峰,更多章节内容可以访问云栖社区“华章计算机”公众号查看
3.5 索引
Greenplum支持B-tree、bitmap、函数索引等,在这里我们简单介绍一下B-tree索引:
testDB=# create table test_index_1 as select * from test_distribute_1;
SELECT 5000000
testDB=# select id,flag from test_index_1 where id=100;
id | flag
-----+------
100 | 0
(1 row)
Time: 2606.125 ms
接下来我们在flag字段上创建bitmap索引:
testDB=# CREATE INDEX test_index_1_idx ON test_index_1 (id);
CREATE INDEX
Time: 34997.881 ms
再次查看执行计划,采用了索引扫描,如下所示。
testDB=# explain select id,flag from test_index_1 where id=100;
QUERY PLAN
-------------------------------------------------------------------------------
Gather Motion 1:1 (slice1; segments: 1) (cost=0.00..200.84 rows=1 width=12)
-> Index Scan using test_index_1_idx on test_index_1 (cost=0.00..200.84 rows=1 width=12)
Index Cond: id = 100
(3 rows)
建好索引后,再次执行上面的查询语句,有索引的情况下,用了23毫秒,相比未创建索引时2606毫秒,有了质的提升。
另外,表关联字段上的索引和appen-only压缩表上的索引都能带来较大的性能提升,虽然在数据库应用中,索引的应用场景不多,但是读者仍然可以结合实际的场景来运用索引。