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

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

我们的文章会在微信公众号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)

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

相关文章:

  • Anthropic 封禁中国资本背景企业使用Claude!国内AI编程选择将何去何从?
  • 故障处理:dul直接抽取exp文件
  • 长治建一个网站大概要多少钱wordpress腾讯地图插件下载失败
  • 惠州做企业网站的最便宜的酒店网站建设
  • 怎么在百度上建立网站宁波seo怎么做引流推广
  • 成都网站排名优化网站维护一般都是维护什么
  • 跨境电商网站排行榜微信小程序网站制作
  • 涿州做网站的呼和浩特网站seo优化方案
  • 企业网站备案申请长沙制作公园仿竹围栏报价
  • 能看男女做那个的网站那些cps网站做的比较好
  • 做电池网站的引导页中国建设银行门户网站企业
  • 解题报告-洛谷P3773 [CTSC2017] 吉夫特
  • wordpress回顶部肇庆seo
  • 网站怎么做英文版的做app的网站有哪些功能
  • 数码商城网站建设wordpress 4.5.3中
  • 做网站后端如何接业务WordPress模板转换emlog
  • 在小说网站做责编wordpress是什么写的
  • ARC137E
  • 政治笔记
  • 并发编程中的乐观锁与悲观锁
  • 软件工程第一次作业(aili)
  • 这里是我做的网站app开发公司怎么选
  • 网络购物网站备案wap网站 微信登录
  • 湛江做网站从整站seo包年费用
  • 单页面网站怎么优化创办一个网站多少钱
  • 营销导向网站建设长沙网站建设与维护
  • 南昌网站开发制作公司网站建设石家庄市
  • 企业网站管理系统演示平台怎么用html做个人的网页
  • 给家乡做网站建设网站好处
  • 创立网站成本网页版梦幻西游踏青寻柳攻略