KingbaseES 全局索引是否DDL操作而变为Unusable ?

前言

Oracle 在对分区做DDL操作时,会使分区全局索引失效,需要加上关键字update global indexes。KingbaseES 同样支持全局索引。那么,如果对分区表进行DDL操作,那全局索引是否会失效了?

测试验证

1、创建测试数据

create table t1_part(id integer,name text,status char(1))
partition by list(status)
(
  partition p_0 values ('0'),
  partition p_1 values ('1'),
  partition p_default values (default)
);


insert into t1_part select generate_series(1,100000),repeat('a',500),'0';
insert into t1_part select generate_series(100001,200000),repeat('a',500),'1';
insert into t1_part select generate_series(200001,300000),repeat('a',500),'2';
create unique index ind_t1_part_2 on t1_part(id) global;
analyze t1_part;

set enable_globalindexscan = on;

2、验证SQL 执行计划

分区truncate 前的执行计划:

test=# explain select * from t1_part where id=123 and status='0';
                                      QUERY PLAN
--------------------------------------------------------------------------------------
 Global Index Scan using ind_t1_part_2 on t1_part  (cost=0.38..4.40 rows=1 width=510)
   Index Cond: (id = 123)
   Filter: (status = '0'::bpchar)

分区truncate 后的执行计划:

test=# alter table t1_part truncate partition p_1;
ALTER TABLE

test=# explain analyze select * from t1_part where id=123 and status='1';
                                                           QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------
 Global Index Scan using ind_t1_part_2 on t1_part  (cost=0.38..4.40 rows=1 width=510) (actual time=0.096..0.097 rows=0 loops=1)
   Index Cond: (id = 123)
   Filter: (status = '1'::bpchar)
   Rows Removed by Filter: 1
 Planning Time: 0.214 ms
 Execution Time: 0.128 ms
(6 rows)

test=# explain analyze select * from t1_part where id=123 and status='0';
                                                           QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------
 Global Index Scan using ind_t1_part_2 on t1_part  (cost=0.38..4.40 rows=1 width=510) (actual time=0.026..0.027 rows=1 loops=1)
   Index Cond: (id = 123)
   Filter: (status = '0'::bpchar)
 Planning Time: 0.378 ms
 Execution Time: 0.067 ms
(5 rows)

测试结论

truncate partition 不会导致全局索引失效。

KingbaseES 对于delete操作,只是在 tuple 上做了个标记,而索引不会进行操作。在通过索引访问tuple时,如果发现数据已经被 Deleted ,也不会报错。因此,对于truncate ,实际就相当于记录被delete。可以看到,在truncate 之后,索引的占用空间没有发生变动,而在 vacuum full ,索引尺寸小了很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KingbaseES是一款国产的关系型数据库,它完全兼容Oracle数据库SQL语法和体系结构,同时具有高性能、高可靠性和高兼容性等优点。以下是KingbaseES在Linux下的登录方式以及安装及初始操作指南: 1. 登录KingbaseES数据库 在Linux终端中输入以下命令,登录KingbaseES数据库: ``` kbsql -h 主机名 -p 端口号 -d 数据库名 -u 用户名 -w 密码 ``` 其中,主机名是KingbaseES服务器的IP地址或主机名;端口号是数据库监听的端口,默认为54321;数据库名是要连接的数据库名称;用户名和密码为数据库的登录凭证。 2. 安装KingbaseES数据库 KingbaseES数据库的安装方式与Oracle数据库类似,可以通过安装包进行安装。安装前需要先安装依赖包,例如: ``` yum -y install libaio ``` 然后下载KingbaseES安装包并解压缩,进入解压后的目录,执行以下命令进行安装: ``` ./install.sh ``` 按照提示完成安装即可。 3. 进行初始操作 安装完成后,可以进行一些初始操作,例如创建用户、创建表空间等。在登录数据库后,可以使用以下命令创建用户: ``` CREATE USER 用户名 IDENTIFIED BY 密码; ``` 创建表空间的命令如下: ``` CREATE TABLESPACE 表空间名 DATAFILE '文件路径' SIZE 大小; ``` 以上是KingbaseES在Linux下的登录方式以及安装及初始操作指南。需要注意的是,在使用KingbaseES时需要按照Oracle数据库的规范进行操作,否则可能会导致不兼容或错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值