前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL 临时表 1 2 3

PostgreSQL 临时表 1 2 3

作者头像
AustinDatabases
发布2019-12-24 12:48:17
1.2K0
发布2019-12-24 12:48:17
举报
文章被收录于专栏:AustinDatabases
周五的那篇本来没觉得会有那么多人看,回头还有留言的,既然大家都有心理的苦,我是这样想的,想要脱离苦难必然提高自己,光靠我们DBA 自己提高是不OK 的,我们的找开发,从项目中对表设计以及相关的业务逻辑入手,优化表设计,这一般都是开发或架构师的工作,一般的DBA 很难分到这样的工作,或分到也是已经成型的表去优化,无非去加个索引,或者其他的分区表一类的工作,这样对我们的发展不利,下面有一个群,我也会开始找开发加加进来,开发对表的设计大概率是平自己的意志,或者上层的意志来进行设计,大多设计(尤其传统行业)可以优化或修改的点太多了,最近会开始写点一些表优化的方式,联合少量的业务逻辑,希望大家能找一些开发加到群里面,数据库的种类可以更换,ORACLE MYSQL POSTGRESQL SQL SERVER mongodb redis

,但到底怎么设计和优化根据业务的事情这点也和数据库有关,不同类型的数据库的特点不同,所以表设计的方式也不同,大部分开发都不大懂,把ORACLE的表直接照搬到MYSQL(第三方或有些说支持多种数据库的软件公司) ,结果也可想而知。知识的扩展如果懂得数据库种类数量算是横向扩展,那根据业务逻辑来进行表的设计就是纵向发展的一部分,所以希望大家可以帮助,拽人或者加入扩展自己,互相帮助。也十分欢迎开发的同学,we are friend ,help each other.

正文___________________________________________________________________

说到临时表,使用MYSQL的同学可能不是很常用,尤其是互联网领域的,临时表在MYSQL 的主从复制环境中使用临时表本身是有缺陷的(这还的扯到程序当中去,解释起来比较复杂)。今天的主题是Postgresql 的临时表,Postgresql 的临时表本身是事带有隔离性的,与ORACLE 不同的是,PostgreSQL的临时表本身更彻底,在SESSION失效后,表的定义都会消失,ORACLE 则不是,表的定义不会消失。这也是两种数据库在临时表上的区别。

我们可以下载做一个测试,我们开两个窗口

在此之外,我们在开一个窗口

首先证明了每个session 中的临时表都是独立的,在别的SESSION 中是看不到的。

另外PostgreSQL 中的临时表还有一些相关方便的设置,在创建时指定临时表的在什么时候消失或者清理数据。

相关postgresql 可以在 commit 中进行设置例如

代码语言:javascript
复制
ON COMMIT DELETE ROWS;
代码语言:javascript
复制
ON COMMIT DROP;
代码语言:javascript
复制
ON COMMIT PRESERVE ROWS;

这三种分别代表不同的含义,一个是在SESSION内,如果COMMIT 就直接将临时表中的行删除 , DROP 是直接commit 后就将表删除,最后是即使commit 也保留表,直到session结束。

另外POSTGRESQL 中的并行扫描,对临时表是无效的。还有一个有意思的事情时,如果你在同一个事务中创建了同名的临时表 和 实体表,则你访问的和操作的都是临时表优先。

另外有一个地方需要讨论的是,临时表在复杂事务中到底帮了我们多少,

临时表可以降低多表进行关联造成的查询复杂性和性能的问题

例如:临时表可以在程序快速调用存储过程中,分解对大表的访问和查询,将中间的结果存储在临时表中,而不是多个大表进行关联,如果我们仅仅需要查询大表中1%的记录,同时可以通过条件来现将大表1%的数据或更少的数据存储在临时表里面,在进行相关的连接,聚合,等操作,会大大减少例如锁等待,死锁,等可能性。

另外和有些数据库不同,PG的临时表会创建在你当前操作的数据库中,并且以t 开头进行命名(这里指的是在临时表的物理存储空间的名字)

所以更好的利用历史表,能让你的例如存储过程,乃至是程序设计都能提升一个层次,当然如果滥用历史表,在不恰当的场景进行使用,则会事倍功半的结果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档