当前位置: 首页 > 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.jsqmd.com/news/24792/

相关文章:

  • 2025 年青海旅行社,青海性价比高的旅行社,西宁旅行社最新推荐,聚焦资质、案例、售后的五家旅行社深度解读
  • 2025年在线折光浓度仪厂家权威推荐榜单:在线折光计/在线近红外光谱仪/在线折光率仪源头厂家精选
  • 第五届电子通信与计算机科学技术国际学术会议(ECCST 2025)
  • 2025 年方形无缝钢管,无缝钢管圆改方,镀锌无缝钢管厂家最新推荐,产能、专利、环保三维数据透视
  • VSCode Debug 插件
  • 2025 年精密无缝钢管、合金无缝钢管、高压锅炉无缝钢管厂家最新推荐,精准检测与稳定性能深度解析
  • 2025年分子动力学仿真厂家权威推荐榜单:动力学模拟/分子动力学模拟/粗粒化模拟源头厂家精选
  • SQL改写:99%DBA估计都会忽略的重大知识点
  • NAS助手 — 纯血鸿蒙时代的 NAS 文件分享新方案
  • 2025年办公室玻璃隔断型材厂家权威推荐榜单:专业玻璃隔断/广州办公室隔断/双层玻璃百叶隔断源头厂家精选
  • Draco 编译及配置
  • 第十一届中国大学生程序设计竞赛 女生专场
  • JAVA 对于class文件反编译,CFR 通常能产生最完整的代码。
  • 2025全焊接换热器/板式换热器/清洗维修推荐榜:科睿泽换热(苏州)领跑,四大企业以高效传热赋能工业节能
  • 2025橡胶/变形缝中埋式/中置式橡胶/预埋式橡胶/内埋式/止水带推荐榜:众航防水领跑衡水市场,四大企业以技术筑牢工程防渗防线
  • 2025 浸没式/全/液冷超充推荐榜:中碳创新领跑 “超充之城”,四大企业解锁低碳补能新范式
  • 【运维自动化-标准运维】各类全局变量使用说明-元变量(完结)
  • 2025年不变色二氧化硅厂家权威推荐榜单:通用型二氧化硅/可定制二氧化硅/高吸油二氧化硅源头厂家精选
  • linux系统启动卡在(1 of 2) A start job is running for .... ()
  • MES 他山之石:红日药业MES 文摘
  • HDMI辐射整改案例-阿赛姆电子
  • 关于curl-一个网址-报错-OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to
  • 电脑截图怎么往下拖着截图?4种方法教你轻松实现长页面截图(滚动截图超全教程)
  • 2025年云南旅游租车公司最新服务推荐榜:芒市旅游包车/芒市旅游租车/云南旅游包车/专注体验与可靠,打造无忧旅途
  • 102302125 苏琎宇 数据采集第1次作业
  • 哈希优化策略
  • 一站式开发速查表大全 - 覆盖主流编程语言与工具
  • GNU C和ANSI C的一些差异
  • gcc系编译器、调试器的应用和c/c++编译原理
  • JAVA FX初次使用并制作辅助工具指南