HGDB索引关键字include
Posted 瀚高PG实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HGDB索引关键字include相关的知识,希望对你有一定的参考价值。
目录
环境
文档用途
详细信息
环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:4.5
文档用途
介绍瀚高数据库安全版4.5中新增的include关键字
详细信息
HGDB中一条查询语句返回多列记录时,如果索引包含全部的返回列则不用回表获取数据,例如:
select c1,c2,c3 from t1 where c1=10;
如果索引包含c1、c2、c3,则会用到index only scan;除此之外HGDB中还有一种方法可以实现类似效果,即include子句。
include即在索引中放入额外属性内容,搜索时不需要回表,例如:
create index idx_t2_1 on t2 (id,c1,c2,c3,info,crt_time);
第一种则是include index;
第二个创建索引的语句是我们比较常见的多列索引;
索引1,KEY是ID,在叶子节点中,存入KEY与(c1,c2,c3,info,crt_time)的内容。
索引2,KEY是(id,c1,c2,c3,info,crt_time)在所有节点中储存的都是所有字段的值,比索引1要重,包括空间、索引维护、更新等。
下面比较下三种索引:普通索引,多列索引,includes index三者的读写性能
创建实验环境
create table t1 (id int, c1 int, c2 int, c3 int, info text, crt_time timestamp);
create table t2(like t1);
create table t3(like t1);
create index idx_t1_1 on t1 (id) include(c1,c2,c3,info,crt_time);
create index idx_t2_1 on t2 (id,c1,c2,c3,info,crt_time);
create index idx_t3_1 on t3(id);
写入10000000条数据
1、include index
insert into t1 select (1000*random())::int,1,1,1,‘test’,now() from generate_series(1,2000000);
2、多列索引
insert into t2 select (1000*random())::int,1,1,1,‘test’,now() from generate_series(1,2000000);
3、普通索引
insert into t3 select (1000*random())::int,1,1,1,‘test’,now() from generate_series(1,2000000);
查询性能对比
1、include index
explain (analyze,verbose,timing,costs,buffers) select id,c1,c2,c3,info,crt_time from t1 where id=1;
image.png
2、多列索引
explain (analyze,verbose,timing,costs,buffers) select id,c1,c2,c3,info,crt_time from t2 where id=1;
image.png
3、普通索引
explain (analyze,verbose,timing,costs,buffers) select id,c1,c2,c3,info,crt_time from t3 where id=1;
image.png
总结:index include技术可以提高整体性能,目前只支持btree和gist索引
更多详细信息请登录【瀚高技术支持平台】查看https://support.highgo.com/#/index/docContentHighgo/da6369c504d7275e
以上是关于HGDB索引关键字include的主要内容,如果未能解决你的问题,请参考以下文章