尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

读书笔记:一文搞懂Oracle全局临时表的统计信息管理

读书笔记:一文搞懂Oracle全局临时表的统计信息管理
📅 发布时间:2026/6/18 19:30:34

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

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

一文搞懂Oracle全局临时表的统计信息管理

临时表是Oracle数据库中非常有用的功能,但你知道如何正确管理它们的统计信息吗?本文将用通俗易懂的方式,带你全面了解全局临时表的统计信息管理技巧。

全局临时表统计信息的基本原理

全局临时表(Global Temporary Table)是Oracle中一种特殊的表,它的数据只在当前会话或事务中有效。由于这种特性,它的统计信息管理也与普通表有所不同:

  1. 默认情况下,临时表的统计信息是会话级的,只在当前会话中有效
  2. 也可以设置共享统计信息,供所有会话使用
  3. 根据临时表的定义方式(ON COMMIT DELETE ROWS或ON COMMIT PRESERVE ROWS),统计信息的收集行为会有所不同

会话级统计信息:为每个会话量身定制

想象你有一个临时表,每个用户使用时填入的数据可能完全不同。这时会话级统计信息就派上用场了:

-- 创建临时表(提交后保留行)
CREATE GLOBAL TEMPORARY TABLE gt(x NUMBER) ON COMMIT PRESERVE ROWS;-- 插入数据
INSERT INTO gt SELECT user_id FROM all_users;-- 收集统计信息
EXEC dbms_stats.gather_table_stats(user, 'GT');

查询统计信息时,你会看到两份数据:

  • SHARED:共享统计信息(初始为空)
  • SESSION:当前会话的统计信息

重要特性:

  • 这些统计信息只在当前会话有效
  • 断开重连后,会话统计信息就消失了
  • 优化器会优先使用会话统计信息

共享统计信息:多个会话共用

如果所有会话使用临时表的方式相似,可以设置共享统计信息:

-- 设置统计信息偏好为SHARED
EXEC dbms_stats.set_table_prefs(user, 'GT','GLOBAL_TEMP_TABLE_STATS','SHARED');-- 收集统计信息
EXEC dbms_stats.gather_table_stats(user, 'GT');

共享统计信息会一直保留,直到你手动删除它们:

-- 删除统计信息
EXEC dbms_stats.delete_table_stats(user, 'GT');

两种临时表的统计信息差异

Oracle中的临时表有两种定义方式,它们的统计信息行为也不同:

1. ON COMMIT DELETE ROWS(提交后删除数据)

CREATE GLOBAL TEMPORARY TABLE temp_del(x NUMBER) ON COMMIT DELETE ROWS;

特点:

  • 收集统计信息时不会自动提交
  • 可以获取到真实的统计信息(不会因为提交而丢失数据)

2. ON COMMIT PRESERVE ROWS(提交后保留数据)

CREATE GLOBAL TEMPORARY TABLE temp_pres(x NUMBER) ON COMMIT PRESERVE ROWS;

特点:

  • 使用CTAS(CREATE TABLE AS SELECT)或直接路径插入时,会自动生成会话统计信息
  • 无需手动收集统计信息

直接路径加载的自动统计信息

对于ON COMMIT PRESERVE ROWS的临时表,使用以下操作时会自动生成统计信息:

  1. CTAS(创建表并插入数据):
CREATE GLOBAL TEMPORARY TABLE gt_pres 
ON COMMIT PRESERVE ROWS
AS SELECT * FROM all_users;
  1. 直接路径INSERT:
INSERT /*+ APPEND */ INTO gt_pres SELECT * FROM all_users;

这样就省去了手动调用DBMS_STATS的步骤,非常方便!

总结:如何选择合适的统计信息方式

  1. 数据差异大的会话 → 使用默认的会话级统计信息
  2. 数据相似的多个会话 → 设置共享统计信息
  3. ON COMMIT DELETE ROWS表 → 可以正常收集统计信息
  4. ON COMMIT PRESERVE ROWS表 → 直接路径操作自动生成统计信息

通过合理利用这些特性,可以让Oracle优化器为临时表生成更准确的执行计划,提升查询性能!

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

提供ORACLE技术支持(系统优化,故障处理,安装升级,数据恢复等) TEL:18081072613,微信、QQ同手机号。

相关新闻

  • 故障处理:dul直接抽取exp文件
  • 2025-09-08 uniapp小程序赋值生效了但是页面却没变化?==》使用v-if+变量来控制元素的重新渲染
  • 12.8 类与对象的绑定方法和非绑定方法

最新新闻

  • PyCaret低代码实现房价预测:从数据准备到模型上线全链路
  • 【Springboot毕设全套源码+文档】基于springboot的智慧仓库(丰富项目+远程调试+讲解+定制)
  • 2026年6月PE排水管企业推荐指南 - 多才菠萝
  • 全维度测评报告:2026 杭州黄金回收报价套路拆解,称重、验金、扣费猫腻逐项核验 - 奢侈品回收评测
  • DSP56800到DSP56800E代码移植:AGU寄存器加载策略与兼容性问题详解
  • Python自动化测试实战:从Selenium到Pytest的完整技术栈解析

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号