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

读书笔记:Oracle分区黑科技:间隔引用分区与虚拟列分区详解

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

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

Oracle分区黑科技:间隔引用分区与虚拟列分区详解

间隔引用分区:让分区管理全自动

想象一下,你的订单表需要按年份分区,但你不想每年手动添加新分区。间隔引用分区就是为此而生的"智能管家"!

传统分区的痛点

过去,当2022年的数据到来时,你需要手动执行:

ALTER TABLE orders ADD PARTITION part_2022 ...;

间隔引用分区的解决方案

现在,只需在创建表时声明规则,Oracle就会自动管理分区:

-- 父表:设置按年自动分区
CREATE TABLE orders (order# NUMBER PRIMARY KEY,order_date TIMESTAMP,data VARCHAR2(30)
) PARTITION BY RANGE (order_date)
INTERVAL (NUMTOYMINTERVAL(1,'year')) -- 关键!自动按年创建分区
(PARTITION part_2020 VALUES LESS THAN ('2021-01-01'));-- 子表:自动继承父表的分区规则
CREATE TABLE order_line_items (order# NUMBER,line# NUMBER,data VARCHAR2(30),CONSTRAINT fk_orders FOREIGN KEY(order#) REFERENCES orders
) PARTITION BY REFERENCE(fk_orders); -- 关键!引用父表分区

实际效果演示

初始状态:插入2020-2021年数据

INSERT INTO orders VALUES (1, '2020-06-01', '订单1');
INSERT INTO order_line_items VALUES(1, 1, '明细1');

此时查看分区:

ORDERS分区:      [part_2020] [part_2021]
ORDER_LINE_ITEMS分区:[part_2020] [part_2021]

魔法时刻:插入2022年数据

INSERT INTO orders VALUES (3, '2022-06-01', '订单3');
INSERT INTO order_line_items VALUES (3, 1, '明细3');

系统自动创建新分区:

ORDERS分区:      [part_2020] [part_2021] [SYS_P1640(自动创建)]
ORDER_LINE_ITEMS分区:[part_2020] [part_2021] [SYS_P1640(自动创建)]

优势总结

  • 全自动管理:无需人工干预,系统自动创建所需分区
  • 父子表同步:子表完全跟随父表的分区变化
  • 命名规范:自动生成的分区可以重命名为有意义的名称

虚拟列分区:用"计算字段"实现智能分区

业务场景

假设你有一个预订编码表,编码规则是:

  • 第一个字母代表地区:A/C→东北(NE),B→西南(SW),D→西北(NW)
  • 示例:A123(东北地区)、B456(西南地区)

传统方法的困境

如果想按地区分区,通常需要:

  1. 新增一个region字段存储地区代码
  2. 每次插入数据时手动计算并填充
  3. 面临数据不一致的风险

虚拟列分区的优雅方案

CREATE TABLE res (reservation_code VARCHAR2(30),-- 虚拟列:不占存储空间,自动计算region AS (DECODE(SUBSTR(reservation_code,1,1),'A','NE', 'C','NE',  -- A或C都是东北'B','SW',            -- B是西南  'D','NW'             -- D是西北))
) PARTITION BY LIST (region) (  -- 按虚拟列分区!PARTITION NE VALUES('NE'),PARTITION SW VALUES('SW'), PARTITION NW VALUES('NW')
);

实际效果

插入测试数据:

INSERT INTO res (reservation_code) VALUES 
('A123'), ('B456'), ('C789'), ('D012');

数据自动进入正确分区:

NE分区:A123(NE), C789(NE)
SW分区:B456(SW)  
NW分区:D012(NW)

虚拟列分区的强大之处

  1. 零存储开销:虚拟列不占用实际存储空间
  2. 实时计算:每次查询时动态计算,保证数据一致性
  3. 灵活表达式:支持复杂SQL函数和计算逻辑
  4. 业务逻辑封装:分区规则与业务逻辑完美结合

技术对比总结

特性 间隔引用分区 虚拟列分区
适用场景 时间序列数据的自动分区 基于业务规则的分区
核心优势 全自动管理,父子表同步 零冗余,业务逻辑内置
技术亮点 INTERVAL + REFERENCE组合 虚拟列+分区表达式

实际应用建议

选择间隔引用分区当

  • 处理时间序列数据(订单、日志等)
  • 需要父子表分区保持严格一致
  • 希望减少人工分区维护工作

选择虚拟列分区当

  • 分区依据需要从原始数据计算得出
  • 业务规则复杂,无法直接使用现有字段
  • 希望保持数据模型简洁,避免冗余字段

这两种分区技术代表了Oracle在数据管理自动化方面的重大进步,让DBA从繁琐的手工维护中解放出来,更加专注于业务价值创造。

------------------作者介绍-----------------------
姓名:黄廷忠
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

http://www.gsyq.cn/news/33013.html

相关文章:

  • 2025年在线折光浓度仪厂家权威推荐榜单:在线折光计/在线近红外光谱仪/在线折光率仪源头厂家精选
  • 2025 年精密无缝钢管、合金无缝钢管、高压锅炉无缝钢管厂家最新推荐,精准检测与稳定性能深度解析
  • 第十一届中国大学生程序设计竞赛 女生专场
  • 2025 年 upe 超高分子量聚乙烯板,upe 板超高分子量聚乙烯板,uhmwpe 超高分子量聚乙烯板厂家最新推荐,产能、专利、环保三维数据透视
  • 2025 浸没式/全/液冷超充推荐榜:中碳创新领跑 “超充之城”,四大企业解锁低碳补能新范式
  • 深入解析:数字信号处理 第一章(离散时间信号与系统)【上】
  • 哈希优化策略
  • GNU C和ANSI C的一些差异
  • gcc系编译器、调试器的应用和c/c++编译原理
  • Day6综合案例1-体育新闻列表
  • 题解:AT_agc015_e [AGC015E] Mr.Aoki Incubator
  • SNP特征通道数是什么意思
  • sqlserver 添加或修改字段
  • 小程序语音通话让智能设备会“说话”
  • 易基因: NG (IF29):颠覆认知!深圳仙湖植物园刘阳团队WGBS及超级泛基因组分析揭示苔藓植物基因家族比维管植物更丰富|项目文章
  • 2025年口碑好的工业制冷供应厂家推荐
  • 2025 年 150 吨地磅,180 吨地磅,200 吨地磅厂家最新推荐,产能、专利、环保三维数据透视!
  • 202510月年口碑好的板式家具品牌前十榜单推荐
  • 学习笔记510—怎么去除”想要访问你的钥匙串中的密钥“Adobe Licensing ”若要给予许可
  • 漫格搭子交友系统:一站式同城社交解决方案
  • 多线程基础-创建线程
  • 多功能名片小程序系统:助力企业与个人高效拓展人脉
  • 2025年上海直连全球云网络公司权威推荐榜单:AIGPU专用算力/GPU计费模式/GPU弹性算力源头厂家精选
  • IvorySQL 社区摆摊啦,GOTC 2025 开源集市等你来玩!
  • 2025年高速离心研磨抛光机厂家权威推荐榜单:环保研磨抛光机/钛合金研磨抛光机/不锈钢研磨抛光机源头厂家精选
  • 【System Beats!】第五章 优化程序性能
  • 2025年口碑好的密集母线槽产品
  • 2025 年凹槽铝方通,吊顶铝方通,铝方通格栅厂家最新推荐,产能、专利、环保三维数据透视
  • 2025年低压电缆品牌排行榜单
  • 2025年模压托盘品牌前十强权威评测:江苏同芯木业引领行业变革