背景

我们经常遇到两种情况下会重建索引,reindex

1、索引崩溃,由于软件或硬件问题导致索引内数据失效而不可用。

2、索引膨胀,当索引膨胀会占用过多磁盘空间,reindex可以解决此问题。

对于临时表和全局临时表而言,临时表可以进行reindex操作,而全局临时表不能进行此操作,原因是全局临时表的表定义是全局的,也就是其他会话也可以用到全局临时表定义。

而临时表是仅针对当前session而言进行的,在会话级别有隔离属性。然而进行reindex操作时,对应索引的relfilenode值会发生改变,不能对全局临时表进行reindex,因为这会影响其他正在使用全局临时表的会话。

测试

[](javascript:void(0)

创建全局临时表:
create global temporary table g_temp_t1(id integer);
创建索引:
create index g_temp_t1_temp on g_temp_t1 (id);
插入数据
insert into g_temp_t1 values (1),(2); reindex全局临时表时报错 原因是relfilenode值不允许改变,是固定的。
TEST=# reindex index g_temp_t1_temp;
警告: skipping reindex index "g_temp_t1_temp" on a global temporary table TEST=# select relname ,relfilenode from sys_class where relname='g_temp_t1_temp';
relname | relfilenode
----------------+-------------
g_temp_t1_temp | 109477
(1 row) 创建临时表:
create temporary table l_temp_t1(id integer) ; 创建索引:
create index l_temp_t1_temp on l_temp_t1 (id); 插入数据:
insert into l_temp_t1 values (1),(2); 临时表索引的relfilenode此时的109481,reindex后relfilenode改变为109482,由于临时表在会话退出后不会保存表,所以会话级别隔离的属性看,这个操作不会影响到其他会话。
TEST=# select relname ,relfilenode from sys_class where relname='l_temp_t1_temp';
relname | relfilenode
----------------+-------------
l_temp_t1_temp | 109481 reindex index l_temp_t1_temp; TEST=# select relname ,relfilenode from sys_class where relname='l_temp_t1_temp';
relname | relfilenode
----------------+-------------
l_temp_t1_temp | 109482
(1 row)

[](javascript:void(0)

总结

在此案例中,我们看到临时表和全局临时表在reindex操作时还是有差别的。更多关于临时表和全局临时表差别请查看文档《KingbaseESV8R6临时表和全局临时表》https://www.cnblogs.com/kingbase/p/16629827.html

KingbaseESV8R6全局临时表不能进行reindex操作的更多相关文章

  1. KingbaseESV8R6临时表和全局临时表

    临时表概述 临时表用于存放只存在于事务或会话期间的数据.临时表中的数据对会话是私有的,每个会话只能看到和修改自己会话的数据. 您可以创建全局(global)临时表或本地(locall)临时表. 下表列 ...

  2. Oracle 临时事务表 全局临时表_global temporary table

    所有的操作都在一个事务里,事务提交后,此表清空,特别适合做插入删除频率特别高的临时表操作,比如插入完数据就开始查询,查询完就删掉等,用完就扔! 临时表分事务级临时表和会话级临时表. 事务级临时表只对当 ...

  3. KingbaseES 全局临时表

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

  4. MSSQLSERVER数据库- 判断全局临时表是否存在

    写一下今天遇到的一个问题. 今天因为一些作用域的问题,我使用了全局临时表,然后我在存储过程里使用了这么一段语句,想判断全局临时表是否存在,如果不存在,则将他DROP掉. 可是这段语句没用. if ex ...

  5. MS SQL 全局临时表的删除

    本来已经搜索到怎么删除了 如下: IF OBJECT_ID( 'tempdb..##TEMP_COPTD') IS NOT NULL Begin DROP TABLE ##TEMP_COPTD End ...

  6. sql server中的用户临时表和全局临时表的区别

    临时表分为: 本地临时表,仅限于当前访问者访问,创建方法去如下:create table #TableName(表结构)储存于数据库tempdb内(硬盘),当前用户断开连接(把当前的),自动删除如果使 ...

  7. .net全局定时定期执行某些操作在Global.asax中具体实现

    全局定时定期执行某些操作看起来是多么自动化的一个问题不过在.net的Global.asax文件中稍微配置即可实现,详细配置如下,感兴趣的朋友可以参考下哈 <%@ Application Lang ...

  8. Sql server 本地临时表、全局临时表的区别

    创建了本地临时表#Tmp.全局临时表##Tmp: 本地临时表: 取名以#开头.如:#Tmp(会自动加上一串后缀) 只有当前的连接可以访问 连接关闭后,本地临时表自动释放 全局临时表: 取名以##开头. ...

  9. oracle相关操作,存储、临时表空间、用户操作、启动过程

    表空间:此空间是用来进行数据存储的(表.function.存储过程等),所以是实际物理存储区域.临时表空间:主要用途是在数据库进行排序运算[如创建索引.order by及group by.distin ...

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

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

随机推荐

  1. win32-UpdateLayeredWindow

    创建半透明的窗口,以及在窗口上绘制不透明的文本 方法: 创建Bitmap具有PixelFormat32bppPARGB像素格式的GDI + 对象. 创建一个Graphics对象以绘制该Bitmap对象 ...

  2. goroutine并发

    每一个并非的执行单元叫作一个goroutine.设想这里的一个程序有两个函数,一个函数做计算,另一个输出结果,假设两个函数没有相互之间的调用关系.一个线性的程序会先调用其中的一个函数,然后再调用另一个 ...

  3. djang中orm使用iterator()

    当查询结果有很多对象时,QuerySet的缓存行为会导致使用大量内存.如果你需要对查询结果进行好几次循环,这种缓存是有意义的,但是对于 queryset 只循环一次的情况,缓存就没什么意义了.在这种情 ...

  4. React 组件之状态

    没有什么是不可能的,只是需要找到正确的方法. 1. 什么是状态? 状态就是组件内部特有数据的载体(组件数据挂载方式),改变数据页面就会刷新,由组件自己设置和更改,也就是说由组件自己产生.维护,使用状态 ...

  5. 【LeetCode哈希表#4】梦开始的地方:两数之和(map),以及关于容器map的一些代码技巧

    两数之和 力扣题目链接(opens new window) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种 ...

  6. Python函数每日一讲 - 一文让你彻底掌握Python中的frozenset函数

    引言 在 Python 中,frozenset() 函数是一个重要的工具,用于创建不可变的集合对象.本文将介绍 frozenset() 函数的语法.用法示例以及实际应用场景,帮助大家更好地理解和应用这 ...

  7. 带你领略下iOS中OC的“alloc”源代码,让你在工作中不在迷惑

    前言 前面我们使用官方开源的objc源码进行了编译调试 objc4-818.2源码编译调试笔记 前言为什么会想要调试源码? 苹果开源了部分源码, 但相似内容太多, 基本找不到代码见的对应关系, 如果能 ...

  8. mongo重启、远程连接

    1.查看当前mongo启动进程 ps -ef | grep mongo 2.修改mongo启动远程连接配制文件 vi /etc/mongod.conf 将 bind_ip=127.0.0.1 这一行注 ...

  9. 【Azure Cloud Service(Extended Support)】如何使用外延服务迁移应用?

    问题一:迁移到云服务扩展后,之前经典版的云服务的部署槽会变成单一的部署槽,关于两个云服务扩展版之间的部署交换能否提供一个演示? 对于具有双槽的云服务(Classic),根据文档中的建议,在迁移到云服务 ...

  10. 2023 年值得一读的技术文章 | NebulaGraph 技术社区

    在之前的产品篇,我们了解到了 NebulaGraph 内核及周边工具在 2023 年经历了什么样的变化.伴随着这些特性的变更和上线,在[文章]博客分类中,一篇篇的博文记录下了这些功能背后的设计思考和研 ...