当前位置: 首页 > news >正文

读书笔记:Oracle临时表全解析:会话私有的数据暂存区

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。

Oracle临时表全解析:会话私有的数据暂存区

临时表的两种类型

Oracle提供两种临时表:

  1. 全局临时表(Global Temporary Tables):长期存在的表结构,但数据仅对当前会话可见
  2. 私有临时表(Private Temporary Tables,18c新增):仅存在于内存中,会话结束后自动删除

注:如果您熟悉SQL Server或MySQL,私有临时表更接近这些数据库中的临时表概念

全局临时表深度解析

核心特性

全局临时表是存储中间结果的理想选择:

  • 数据隔离性:每个会话只能看到自己的数据,即使其他会话提交了数据
  • 零并发冲突:会话间永远不会因临时表互相阻塞
  • 存储机制:表结构永久存在,但数据存储在用户的临时表空间中

两种数据持久模式

  1. 会话级(SESSION):数据跨越事务存在,直到会话结束
CREATE GLOBAL TEMPORARY TABLE temp_session
ON COMMIT PRESERVE ROWS
AS SELECT * FROM employees WHERE 1=0;
  1. 事务级(TRANSACTION):数据在提交后自动清除
CREATE GLOBAL TEMPORARY TABLE temp_transaction
ON COMMIT DELETE ROWS
AS SELECT * FROM employees WHERE 1=0;

使用示例演示

-- 插入测试数据
INSERT INTO temp_session SELECT * FROM employees;
INSERT INTO temp_transaction SELECT * FROM employees;-- 提交前查询
SELECT (SELECT COUNT(*) FROM temp_session) AS session_cnt,(SELECT COUNT(*) FROM temp_transaction) AS transaction_cnt;-- 提交后查询
COMMIT;
SELECT ... -- 事务级临时表数据已清空-- 重新连接后查询
DISCONNECT;
CONNECT username/password@database;
SELECT ... -- 两种临时表数据都已清空

重要设计原则

  1. 预先创建原则

    • 临时表应在应用部署时创建,而非运行时动态创建
    • 动态创建会导致四大问题:
      • DDL操作开销巨大
      • 必须使用动态SQL
      • 过程无法并行执行
      • 异常可能导致表残留
  2. 功能限制

    • 不支持参照完整性约束(外键)
    • 不能包含嵌套表列
    • 不能是索引组织表(IOT)
    • 不能分区
    • 不能用ANALYZE收集统计信息

统计信息挑战与解决方案

临时表面临的主要挑战是优化器缺乏统计信息:

问题表现

  • 优化器只能猜测数据分布
  • 复杂查询可能生成次优执行计划
  • 可能导致性能问题

解决方案

  1. 优先考虑替代方案

    • 使用内联视图(INLINE VIEW)代替临时表
    • Oracle能更好地处理多表连接
  2. 确需使用时

    • 通过DBMS_STATS设置优化器统计信息
    DBMS_STATS.SET_TABLE_STATS(ownname => 'USER',tabname => 'TEMP_TABLE',numrows => 1000,numblks => 10
    );
    

经典使用场景示例

Palm同步应用程序案例

  1. 将Palm设备修改记录存入临时表
  2. 与Oracle主数据比较生成同步清单
  3. 分阶段处理:
    • 仅Palm修改的记录
    • 双方都修改的记录
    • 仅数据库修改的记录
  4. 最后将变更推回Palm设备

这种需要多阶段处理中间结果的场景,正是临时表的最佳应用场景。

最佳实践建议

  1. 避免滥用临时表

    • Oracle能高效处理复杂多表查询
    • 不要将单一查询人为拆分为多个临时表操作
  2. 统计信息管理

    • 对已知数据特征的临时表手动设置统计信息
    • 特别是记录数、索引选择性等关键指标
  3. 类型选择

    • 短期中间结果用事务级临时表
    • 需要跨事务使用的数据用会话级临时表
  4. 私有临时表适用场景

    • 18c及以上版本
    • 真正临时性的数据处理
    • 不希望留下任何痕迹的操作

------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

http://www.sczhlp.com/news/75700/

相关文章:

  • 集团网站 wordpresswordpress 免密码破解
  • 如何做一个网站赚钱域名购买后如何建设网站
  • discuz做服务网站怎么注册网站域名备案
  • 网站开发公司的推广费用织梦如何做淘宝客网站
  • 厦门做企业网站比较好的公司wordpress导入项目
  • 河南建设监理协会网站6mx主题wordpress
  • 住建部禾建设部是一个网站吗亿网科技有限公司
  • 怎么做网站盈利网站换vps
  • 一家做运动鞋的网站好做游戏都需要什么网站吗
  • arcmap中为镶嵌数据集build overview报错Error:8004206f 解决办法
  • [After 笔记]哈希算法
  • Surface电脑在装Linux系统后频繁断网问题解决方案
  • 建设网站关键词怎么写网站优化比较好用的软件
  • 苏州网站建设专家wordpress 上线到centos
  • 网站分析百度青岛建网站哪个好
  • 做的网站怎么上传哪个软件制作视频比较好
  • 聊城做网站网络公司大连企业网站制作
  • wordpress 无法评论关键词排名优化易下拉效率
  • 网站建设鑫科技史上最强大的搜索神器
  • 网站域名到期怎么续费昆明做一个公司网站多少费用
  • 高碑店网站网站建设seo是什么单位
  • 做商务网站公司公司网站服务商
  • 外贸soho东莞建站采购公告 校园网站建设
  • 玖云建站系统网站在当地做宣传
  • 如何对网站做引擎优化网站建设简单合同模板
  • 教育网站制作设计哪里可以免费注册网站
  • 企业网站官网模板html网页导航栏模板
  • 吴江做招聘的网站有限公司网站建设 互成网络地址 四川
  • 营销网站建设案例网站模板内容页在哪
  • 总结