背景

我们经常遇到两种情况下会重建索引,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. 工作中常用HTML知识点整理

    1.table相关样式 border:设置表格边框大小cellspacing:设置单元格间距cellpadding:设置单元格边界与单元格内容间距border-collapse:设置表格的边框是否被合 ...

  2. GDI实现透明菜单位图

    case WM_CONTEXTMENU: { m_hMenu = CreatePopupMenu(); g_BitMap = (HBITMAP)LoadImage(NULL, L"1.bmp ...

  3. win32 - WM_DROPFILES的用法

    WM_DROPFILES: 当用户将文件拖放到已注册为丢弃文件的接收者的应用程序窗口中时发送该消息 我们可以利用这个消息获取文件名称,并将它们保存到容器里. LRESULT CALLBACK Stat ...

  4. ASP.NET Core MVC应用模型的构建[4]: Action的选择

    ControllerModel类型的Actions属性包含一组描述有效Action方法的ActionModel对象.对于定义在Controller类型中的所有方法,究竟哪些方法才能成为有效的Actio ...

  5. 【Azure Developer】使用 Azure Python 查看 Azure 所有的 Alert rule

    问题描述 在Azure Alert 门户中,可以列举出所有Azure资源的Alert rule信息,如下图: 如果像通过Python SDK来获取所有的Alert Rule,有什么可以参考的代码吗? ...

  6. 一个利用go反向代理解决api转发的例子(go反向代理)

    实现的效果: 如果访问的url路径是类似 /163/  或 /163/debian 的形式,则转发到163开源镜像服务器 直接上代码: package main import ( "fmt& ...

  7. kafka的简单架构

    定义 Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue) , 主要应用于大数据实时处理领域. 1) Producer : 消息生产者,就是向 kafka broker ...

  8. Codeforces Round 920 (Div. 3)(A~F)

    目录 A B C D E F A 按题意模拟即可 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for ...

  9. MySQL8.0与5.7版本的下载、安装与配置

    •软件下载 下载地址 [官网],点开该网址,点击  DOWNLOAD 来到如下页面: MySQL的版本介绍 MySQL Community Server  社区版本:开源免费,自由下载,但不提供官方技 ...

  10. redis开启多端口

    Centos安装多端口的redis服务 背景 redis默认端口6379,由于开发需要,key有重复.于是另起端口6380. 配置服务过程 1.新建/etc/redis6380.conf,内容如下: ...