前言

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 ,索引尺寸小了很多。

KingbaseES 全局索引是否因为DDL操作而变为Unusable ?的更多相关文章

  1. KingbaseES 全局索引

    概述:在分区表上创建的索引可分为全局索引和本地索引.全局索引包括全局非分区索引(Global Nonpartitioned Indexes)和全局分区索引(Global Partitioned Ind ...

  2. [z]分区truncate操作的介绍及对全局索引和空间释放影响的案例解析

    [z]https://www.2cto.com/database/201301/181226.html 环境: [sql] [oracle@localhost ~]$ uname -r 2.6.18- ...

  3. Oracle 12C 新特性之表分区带 异步全局索引异步维护(一次add、truncate、drop、spilt、merge多个分区)

    实验准备:-- 创建实验表CREATE TABLE p_andy(ID number(10), NAME varchar2(40))PARTITION BY RANGE (id)(PARTITION ...

  4. Atitit.分区对索引的影响 分区索引和全局索引 attilax总结

    Atitit.分区对索引的影响 分区索引和全局索引 attilax总结 1. 分区的好处1 2. 分区键:2 3. 分区的建议:2 4. 分区索引和全局索引:2 5. 全局索引就是在全表上创建索引, ...

  5. KingbaseES 全局临时表

    Postgresql 支持会话级别的临时表,表的存续期只在创建临时表的会话存活期间,会话退出后,临时表自动删除,表结构及数据也无法跨会话共享.KingbaseES 除了支持PG原生的临时表机制外,还支 ...

  6. MySQL--各版本DDL 操作总结

    MySQL 5.5 DDL 在MySQL 5.5版本前,所有DDL操作都使用Copy Table的方式完成,操作过程中原表数据库不允许写入,只能读取,在MySQL 5.5版本中引入FIC(Fast i ...

  7. MySQL在线大表DDL操作

    在线大表DDL操作的方法: 1.主从架构轮询修改 需要注意: a.主库会话级别的记录binglog的参数关闭 b.500\502错误异常捕捉 c.检查备库的second behind master是否 ...

  8. MySQL在线大表DDL操作 (转)

    http://www.cnblogs.com/janehoo/p/5382474.html 线大表DDL操作的方法: 1.主从架构轮询修改 需要注意: a.主库会话级别的记录binglog的参数关闭 ...

  9. Oracle12c中性能优化&功能增强新特性之全局索引DROP和TRUNCATE 分区的异步维护

    Oracle 12c中,通过延迟相关索引的维护可以优化某些DROP和TRUNCATE分区命令的性能,同时,保持全局索引为有效. 1.   设置 下面的例子演示带全局索引的表创建和加载数据的过程. -- ...

随机推荐

  1. python基础知识-day8(函数实战)

    1 def out(): 2 username=input("请输入用户名:\n") 3 password=input("请输入密码:\n") 4 return ...

  2. Metasploit msfvenom

    一. msfvenom简介 msfvenom是msf payload和msf encode的结合体,于2015年6月8日取代了msf payload和msf encode.在此之后,metasploi ...

  3. UiPath邮件自动化

    在UiPath中下载Outlook电子邮件附件Outlook电子邮件自动化教程UiPathRPAhttps://www.bilibili.com/video/BV1oK411L72T 在UiPath中 ...

  4. RPA-UiPath视频教程1

    UiPath下载.安装.激活.第一个案例Helloworld!.参数类型.变量的介绍和使用 https://www.bilibili.com/video/av92816532 RPA直播公开课2020 ...

  5. 期末人福音——用Python写个自动批改作业系统

    一.亮出效果 最近一些软件的搜题.智能批改类的功能要下线. 退1024步讲,要不要自己做一个自动批改的功能啊?万一哪天孩子要用呢! 昨晚我做了一个梦,梦见我实现了这个功能,如下图所示:功能简介:作对了 ...

  6. 使用Thread类和Runnable接口实现多线程的区别

    使用Thread类和Runnable接口实现多线程的区别 先看两种实现方式的步骤: public class ThreadDemo{ public static void main(String[] ...

  7. Git的历史和安装Git及环境配置

    Git历史同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代. Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务 ...

  8. while and do while

    package study5ran2yl.study; public class deno14 { public static void main(String[] args) { //计算1+2+. ...

  9. 使用Win自带的远程工具连接Linux

    网上教程一大堆,我这边只简单记录一下,主要是黑屏问题,和剪贴板问题.Win连接Linux,一般都是使用的xrdp, 如果是使用的旧版本的Ubuntu,建议先装一下xfce桌面,gnome桌面一般连不起 ...

  10. 你有没有想过用电子表格也能做MES、WMS、SRM和MRP

    曾几何时,小微企业多半选择excel和WPS等电子表格,中小企业更喜欢选择用友金蝶和浪潮这样的国产大品牌软件,而大型企业则偏爱SAP.oracle这样的国外大品牌. 时至今日,风向却变了,品牌软件已不 ...