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倍,具体得看数据。
降低了加载性能,可对应列一致。比如全部列,则增加一倍。