GBase 8a集群global hash和grouped人工维护的索引使用

GBase 8a数据库支持2类索引,可人工创建和删除。其中针对精确查询的Hash索引,以及针对多列查询的行存列索引。

1、针对精确查询的hash 索引

create index index_name on table_name(field_name) key_block_size=4096 key_dc_size=100 using hash global;

key_block_size

指定每个数据块的大小。Size_value 最小值 4096,最大值32768,size_value 必须是 4096 的整数倍。

key_dc_size

多少个数据包(DataCell)创建一个 hash 索引。指定该参数时,表示创建的是分段哈希索引。

说明

精确查询(等于= 和不等于 <>),范围查询,模糊查询(like)无效。

适合重复度低的,比如身份证号码,手机号,IP地址等 对重复度高的,比如省份,性别,类型等不要建这个索引

可以通过

drop index index_name on table_name;

来删掉索引;

优点

提高精确查询的性能。

缺点

增加了磁盘占用,大约等于对用列数据的1-1.3倍。

降低了加载性能,因为要更新索引。这部分影响和总列数,数据量,数据宽度,数据类型,服务器空闲内存有关,索引越多影响越大。

2、行存列索引

针对select 大量的列的情况,通过额外的磁盘来提高性能。

alter table table_name add grouped group_name (查询字段1,查询字段2,。。。。);

可以通过

alter table table_name drop grouped group_name;

来删除

如果只select 很少的列,或者列在嵌套内使用,则无效。此功能只针对最外层,返回结果集前的最后一步才有效过。

如上2个索引最典型的场景

select a,b,c,d,ef,ef,ds,f,dsf,dsf,ds,fds,fdf 大量的列 from myTable where call_number=13812345678

优点

提高精确查询的性能。

缺点

增加了磁盘占用,基本等于对用列数据的1-1.1倍,具体得看数据。

降低了加载性能,可对应列一致。比如全部列,则增加一倍。