摘要:作为SQL标准中的一种表格,当实施各个制造商时,临时表通常是不同的,甚至行为也不同。本文总结了GaussDB(DWS)的临时表使用情况。
创建表的基本语法如下(有关详细信息,请参见手册):
与临时表相关的关键字是:
创建临时表时,您可以在临时或tempory之前指定全局或本地关键字。在当前,GaussDB(DWS)设置这两个关键字,仅与SQL标准兼容。就实际行为而言,无论是在全球还是本地中指定,GaussDB(DWS)仅作为本地临时表创建,也就是说,只有本地关键字是有效的。
temp and tempory等效。如果您指定临时或tempory关键字,则创建的表是临时表。临时表行为的主要特征仅对当前会话可见,并且会在会议之后自动删除。由于临时表仅是临时表在当前会话中创建的涉及涉及临时表操作的DDL语句的DDL语句很容易在DDL失败中产生错误。因此,建议不要在DDL语句中操作临时表。
上提交选项确定了交易中临时表操作的创建。提交交易时,提交此临时表的后续操作。有三个选项:
GaussDB(DWS)的临时表机制从PostgreSQL继承。临时表基本上与元数据和数据存储中的普通表没有什么不同。具体而言,临时表是在构建表格时将架构指定为会话ID。Schema,其他会话实际上可以在System Table.gaussdb(dws)中使用当前临时表的元数据,使用架构用于不同的会话来隔离。这种机制是通过这里的两个现象来解释的:
现象1:
session_1创建一个临时表:
另一个session_2,您可以通过pg_class看到临时表的表结构:
但是在session_2中,无法查看当前临时表中的数据:
现象2:
根据该临时表的架构创建临时表之后,创建一个相同架构的常见表:
随后,从当前会话中撤回并重新连接以查看表状态,我们会神奇地发现,在消失之前创建的临时表TT1,其创建的一般表TT2也消失了。
1.与永久表相比,临时表的使用可以提高性能,但是存在数据丢失的风险。临时表仅在当前会话中可见,并且会议结束后将自动删除。数据丢失是不可接受的,请使用永久表。
2.与临时表相对应的搜索路径中SECHEMA的优先级高于其他SECHMA,也就是说,临时表对应于具有第一个搜索优先级的模式。
3.并行模式不支持创建临时表!如果您需要使用临时表,则需要在打开并行之前创建它并在并行内使用它。并行在并行内创建的临时表不会生效。
4. pg_total_user_resource_info视图在view_temp_space和当前临时表的topal_temp_space中
5.创建临时表时,将同时创建临时模式。
6.当CN重试函数打开时,将记录临时表数据记录日志。为了确保数据的一致性,使用临时表时CN重试开关状态无法切换。
7.临时表和非围具表与基础表相同。还建议存储基础表(列)表,临时表和非围栏表以创建一个线(列表)表,可以避免混合关联带来的高计算成本。
8.如果使用上限应用程序,则使用连接池机构连接GaussDB(DWS)。使用临时表时,强烈建议在连接池的连接之前被临时表删除。
9.首次使用临时表之前,您可以更改temp_buffers的值。
10.自动分析不支持使用onCommit [删除行|滴]触发自动分析的选项。如果您需要收集
11.如果创建视图时包含临时表,则视图将自动转向临时视图
临时存储
临时表可以减少冗余中间表的存在。在某些复杂的操作中,通常有必要使用一些中间表来完成功能,但是通常,普通表的创建需要数据库管理员来计算和维护。允许使用临时表的存在来清除中间表,减少数据库系统中冗余表的存在。此外,使用时会话分隔。其他会话无法看到当前的会话数据,并且数据安全性在一定程度上更好。
改进
SQL太复杂了,不容易通过普通优化方法调整性能,可以考虑分裂方法,将SQL的一部分分成独立的SQL并将执行结果保存到临时表中。常见场景不限于:但不限于:
本文分享了华为云社区的诚意,作者:Sincatter。