当前位置:操作系统 > Unix/Linux >>

Greenplum管理索引

Greenplum管理索引
 
鉴于OLAP系统的特性,应该谨慎并保守地使用索引。避免在频繁更新的列上使用索引;在高选择性的列上使用B-tree索引;在低选择性的列上使用Bitmap索引。
通常来说在传统数据库中使用索引可以有效的提高数据访问效率,特别是在OLTP系统中,往往只是需要从大表中获取几行或者部分的数据记录,这个情况下索引确实是特别有效的提高数据获取速度的方法。但是在gp中未必如此,因为首先数据都是均匀最大可能的均匀分布到segs的,这意味着每个instances只是扫描整体数据的一部分,而且如果使用了分区技术,需要扫描的数据可能会更少,最后不同于OLTP的是在大数据环境中往往获取的都是大部分的记录集,在这个情况下使用索引未必是有效的提高数据获取速度的方法,应该保守使用索引。正确的方式应该是在不创建任何索引的情况下测试下性能,而后再做出正确的决定。
如果使用了主键,则会自动为之创建索引;在压缩只读表中使用索引,索引只会解压所需要部分的数据而不是整张表;避免在频繁更新的列上创建索引;在高选择性的列上使用b-tree索引,在低选择性的列上使用位图索引;未外键或者关联键创建索引;为经常使用的过滤词创建索引;避免在同一个列上重复创建索引,这是不必要的冗余;在load数据之前删除掉索引,之后再创建索引,这通常比update索引更快;使用类似cluster索引的技术创建索引。
含有以下类型的索引:
B-tree、GiST、Bitmap
不支持hash和gin索引,默认创建的是B-tree索引;唯一索引必须包含在分布键中(可以是全部或者部分列,在第1个索引中可以部分列,之后必须全部列),唯一索引不支持ao表,唯一索引不会跨越分区起作用,只是针对独立的分区;位图索引比普通索引占用更小的空间,在不同键值在100到100000之间都能发挥很好的效果,位图索引不应在经常更新的表中使用。
 create index idx1 on t3 (id);
 create index idx2 on t3 using bitmap (id);
 drop index idx1;
 通过explain命令来检验是否使用索引:index scan、bitmap heap scan、bitmap index scan、BitmapAnd or BitmapOr 
重建索引
reindex idx1;
重建索引将会使用已有索引上的数据信息,这将会比删除重建索引要快的多。删除和更新操作不会更新位图索引,因此需要手工reindex bitmap index。
gtlions=# select * from pg_indexes where tablename='t1';
 schemaname | tablename | indexname | tablespace  |                      indexdef                      
------------+-----------+-----------+-------------+----------------------------------------------------
 gtlions    | t1        | t1_pkey   | gtlions_ts2 | CREATE UNIQUE INDEX t1_pkey ON t1 USING btree (id)
(1 row)
-EOF-
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,