iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Kingbase 全局临时表
  • 809
分享到

Kingbase 全局临时表

Kingbase全局临时表 2017-02-20 05:02:31 809人浏览 无得
摘要

postgresql 支持会话级别的临时表,表的存续期只在创建临时表的会话存活期间,会话退出后,临时表自动删除,表结构及数据也无法跨会话共享。KINGBASE除了支持PG原生的临时表机制外,还支持类似oracle 的临时表机制,也就是全局

Kingbase 全局临时表

postgresql 支持会话级别的临时表,表的存续期只在创建临时表的会话存活期间,会话退出后,临时表自动删除,表结构及数据也无法跨会话共享。KINGBASE除了支持PG原生的临时表机制外,还支持类似oracle 的临时表机制,也就是全局临时表。全局临时表支持表结构共享,避免用户每次了都需要创建临时表的操作。以下以例子的形式,介绍PG 临时表与全局临时表的机制与差异。

一、PG 支持的临时表

会话A:创建临时表

test=# create temporary table temp_t1(id integer);
CREATE TABLE
test=# insert into temp_t1 values(1);
INSERT 0 1
test=# d
                List of relations
  Schema   |        Name         | Type  | Owner  
-----------+---------------------+-------+--------
 pg_temp_4 | temp_t1             | table | system

test=# select * from temp_t1;
 id 
----
  1

会话B:

test=# select * from pg_temp_4.temp_t1;
ERROR:  cannot access temporary tables of other sessions

PG 临时表机制总结

  • 创建语法上,临时表可以选择global or local,但实际都是local的(PG 后续语法不再支持 global),其它会话不能访问(实际是空表可以访问,有数据情况下就会报错)。
  • ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP }
    • PRESERVE ROWS 表示临时表的数据在事务结束后保留。默认使用的是PRESERVE ROWS。
    • DELETE ROWS 表示临时表的数据在事务结束后truncate掉。
    • DROP 表示临时表在事务结束后删除。
  • 当会话第一次创建临时表时,会自动创建 SYS_TEMP_XXX 模式,该会话的所有临时表都放在该模式下。如果表里有可能产生toast存储的字段,也会同时创建pg_toast_temp_XXX模式。
  • 临时表在会话结束后会自动删除(或者在事务结束后删除on commit drop),也就是说每个会话需要使用临时表的话需要重新创建。
  • 如果有临时表和非临时表重名了, 那么默认是使用临时表的,因为临时表模式在search_path 参数值里是排在最前面的。如果要使用非临时表,需要带上schema,如schema.table。
  • 临时表上创建的索引也是临时的。
  • 临时表的统计信息不会被autovacuum daemon自动收集,所以如果有复杂查询的话,最好在有DML后执行analyze。

二、全局临时表

PG 建临时表时也可以用 create global temporary table,但实际创建的都是local 级别的。KINGBASE 如果用create global temporary table,实际意义上创建的是全局的临时表,临时表的机制与oracle相似。

A会话:创建临时表

test=# create global temporary table g_temp_t1(id integer) on commit preserve rows;
CREATE TABLE
test=# insert into g_temp_t1 values(1);
INSERT 0 1
test=# select * from g_temp_t1;
 id 
----
  1
(1 row)

test=# d 
                List of relations
  Schema   |        Name         | Type  | Owner  
-----------+---------------------+-------+--------
 pg_temp_4 | temp_t1             | table | system
 public    | g_temp_t1           | table | system

B会话:可以访问A会话创建的临时表

test=# select * from g_temp_t1;
 id 
----
(0 rows)

test=# insert into g_temp_t1 values(2);
INSERT 0 1
test=# select * from g_temp_t1;        
 id 
----
  2

A会话:会话退出后,表结构还在,但A会话插入的数据没有了。

test=# select * from g_temp_t1;
 id 
----
  1
(1 row)

test=# q
[kingbase@dbhost03 ~]$ ksql -d test -U system
ksql (V8.0)
Type "help" for help.

test=# d
               List of relations
 Schema |        Name         | Type  | Owner  
--------+---------------------+-------+--------
 public | g_temp_t1           | table | system
 public | sys_stat_statements | view  | system
 
test=# select * from g_temp_t1;
 id 
----
(0 rows)

KINGBASE 全局临时表总结:

  • 与oracle一样,默认是 on commit delete rows
  • 临时表数据只对当前会话或事务可见。每个会话只能查看和修改自己的数据。

 三、普通表、临时表、全局临时表字典信息差异

test=# select relnamespace::regnamespace, relname,relpersistence,relkind,reltablespace from pg_class where relname in ("t1","temp_t1","g_temp_t1");
 relnamespace |  relname  | relpersistence | relkind | reltablespace 
--------------+-----------+----------------+---------+---------------
 public       | t1        | p              | r       |             0
 public       | g_temp_t1 | s              | r       |             0
 pg_temp_5    | temp_t1   | t              | r       |             0

以下几点需要注意:

  • relkind 都为 r ,都是relation。
  • relpersistence 不同,全局临时表为 s ,普通临时表为 t
  • relnamespace 不同,普通临时表是创建在 pg_temp_xxx 模式下
  • 不管是全局临时表,还是普通临时表,默认都是unlogged 方式

四、性能比较

test=# create table t1(id integer,name varchar(200));
CREATE TABLE
test=# create temporary table temp_t1(id integer,name varchar(200));
CREATE TABLE
test=# create global temporary table g_temp_t1(id integer,name varchar(200));
CREATE TABLE

BEGIN
for i in 1..200000 loop
  insert into g_temp_t1 values(i,repeat("a",200));
end loop;
END;
/
ANONYMOUS BLOCK
Time: 1684.636 ms (00:01.685)

BEGIN
for i in 1..200000 loop
  insert into temp_t1 values(i,repeat("a",200));
end loop;
END;
/
ANONYMOUS BLOCK
Time: 741.746 ms


BEGIN
for i in 1..200000 loop
  insert into t1 values(i,repeat("a",200));
end loop;
END;
/
ANONYMOUS BLOCK
Time: 944.549 ms

test=# insert into temp_t1 select generate_series(1,500000),repeat("a",200);
INSERT 0 500000
Time: 484.780 ms

test=# insert into g_temp_t1 select generate_series(1,500000),repeat("a",200); INSERT 0 500000 Time: 2606.722 ms (00:02.607)
test
=# insert into t1 select generate_series(1,500000),repeat("a",200); INSERT 0 500000 Time: 1856.685 ms (00:01.857)

通过观察日志,可以看到本地临时表、全局临时表基本不产生redo日志。但从实际执行效率看,全局临时表的效率是最差的,甚至不如普通的表。但这不妨碍全局临时表的使用,不产生Redo就是最好的优点。

五、全局临时表实现机制

根据全局临时表的relfilenode,我们查找了相关的表,发现数据库目录下有如下文件:

-rw------- 1 kingbase kingbase     8192 Jun 16 15:45 t5_19820
-rw------- 1 kingbase kingbase     8192 Jun 16 15:47 t4_19820

每个文件实际对应一个事务,事务提交后,对应文件也就删除。

 

您可能感兴趣的文档:

--结束END--

本文标题: Kingbase 全局临时表

本文链接: https://www.lsjlt.com/news/8522.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle全局临时表的特点有哪些
    全局临时表是一种特殊类型的表,它在整个数据库会话期间都存在,而不是只存在于特定的会话中。 全局临时表的数据对所有的会话都是可见的,...
    99+
    2024-04-19
    Oracle
  • oracle全局临时表有的两种模式介绍
    本篇内容介绍了“oracle全局临时表有的两种模式介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • 数据库中如何实现全局临时表GTT的统计信息
    这篇文章主要介绍数据库中如何实现全局临时表GTT的统计信息,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们都知道,全局临时表GTT分为两种,一种是transaction level...
    99+
    2024-04-02
  • MySQL之临时表
    写在前面 本文一起看下MySQL的临时表。 1:什么是临时表 通过create temporary table t语句创建的表,就是临时表,临时表的临时体现在其生命周期是和会话一样的,当会话结束,即连接关闭时MySQL会自动将创建的临时表执...
    99+
    2023-08-17
    mysql 临时表 内存表 temporary table
  • MYSQL & DB2临时表
    MySQL 建立临时表 CREATE TEMPORARY TABLE 创建临时表 临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间 如果链接到MySQL使用持久性连接,那么只...
    99+
    2023-10-06
    mysql 数据库
  • mysql临时表,临时表空间,ibtmp1表空间暴增原因初探
    问题的形式解答: 一、MySQL在什么情况下会创建临时表(Internal Temporary Table Use in MySQL)? 我列举3个 1. UNION查...
    99+
    2024-04-02
  • SQLServer临时表的正确删除方式(sqlserver删除临时表)
    目录SQL Server临时表的正确删除方式1、错误的删除操作:2、正确的删除方式:补充:SQL临时表的使用示例删除临时表SQL Server临时表的正确删除方式 临时表与一般的表不...
    99+
    2023-02-16
    sql删除临时表 sql临时表使用
  • MySQL怎么建临时表
    在MySQL中,可以使用CREATE TEMPORARY TABLE语句来创建临时表。 临时表是一种只在当前会话有效的表,它的数据仅...
    99+
    2023-10-27
    MySQL
  • SQL Server临时表的正确删除方式(sql server 删除临时表)
    目录SQL Server临时表的正确删除方式1、错误的删除操作:2、正确的删除方式:补充:SQL临时表的使用示例删除临时表SQL Server临时表的正确删除方式 临时表与一般的表不同,它是保存到tempDb表中。临时表...
    99+
    2023-02-16
    sql删除临时表 sql临时表使用
  • SQL注入之临时表
    目录 一、什么是临时表: 二、临时表生成场景:  性质1: 性质2: 性质3:  三、临时表与union进阶利用: 四、利用场景: 一、什么是临时表: 是建立在系统临时文件夹中的表;只在当前连接可见,当关闭连接时,MySQL...
    99+
    2023-09-06
    sql mysql 数据库 web安全
  • 【临时表空间组】临时表空间组的创建、维护及应用
    关于临时表空间组的概念和简单描述可以参考Oracle官方文档的“Oracle Database SQL Reference”(http://download.oracle.com/docs/cd/B19306_01/server.102/b...
    99+
    2023-06-06
  • mysql什么时候创建临时表
    MySQL中临时表在以下情况下被创建:1、当执行包含“CREATE TEMPORARY TABLE”语句时,会创建一个临时表,只在当前的数据库连接中存在,并且在连接关闭后会自动删除;2、当执行一些复杂的查询或排序操作时,MySQL可能会在内...
    99+
    2023-07-28
  • oracle临时表如何使用
    在Oracle数据库中,临时表是一种用于临时存储数据的特殊表。临时表在创建后只对当前会话可见,并在会话结束时自动删除。临时表可以用于...
    99+
    2023-08-23
    oracle
  • mysql中如何用临时表
    这篇文章主要介绍了mysql中如何用临时表的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql中如何用临时表文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • mysql如何查询临时表
    这篇文章主要讲解了“mysql如何查询临时表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql如何查询临时表”吧! 本教程...
    99+
    2024-04-02
  • 如何删除MySQL临时表?
    我们知道,如果当前会话终止,MySQL 临时表将被删除。但仍然在会话之间我们想要删除临时表,而不是借助 DROP 语句我们可以删除临时表。可以借助以下示例来理解 -示例在此例如,我们正在删除名为“SalesSummary”的临时表 ...
    99+
    2023-10-22
  • ORCAL 临时创建表与删除表
    目录一.Orcal临时表分类1.会话级临时表2.事务级临时表二.临时表创建1.会话级临时表2.事务级临时表三.删除临时表四.删除时报错1.清空表,然后删除表2.杀掉进程,然后删除一....
    99+
    2024-04-02
  • SqlServer如何实现临时表
    小编给大家分享一下SqlServer如何实现临时表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!--创建临时表 #开头creat...
    99+
    2024-04-02
  • mysql临时表怎么使用
    这篇文章主要介绍了mysql临时表怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql临时表怎么使用文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • MySQL中临时表如何使用
    今天就跟大家聊聊有关MySQL中临时表如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQL如何使用临时表 【临时表存储】MyS...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作