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

Oracle:使用ONLINE选项创建索引

在Oracle中,使用ONLINE选项创建索引可在不阻塞DML操作(增删改)的情况下完成索引构建,适用于生产环境。


⚡ 一、语法与核心特性

  1. 基础语法

    CREATE INDEX 索引名 ON 表名(列名) ONLINE;

    • 示例‌:

      CREATE INDEX idx_user_id ON user_info(user_id) ONLINE;

  2. 锁机制区别‌ ‌

    • ONLINE模式‌:仅锁定行(Row-S/SS级锁),允许并发DML操作(如INSERT/UPDATE/DELETE)。
    • 非ONLINE模式‌:锁定整个表(TM表级锁),阻塞所有DML操作直至索引创建完成。
    • 安全性‌:ONLINE模式通过临时日志表(SYS_JOURNAL_xxx)记录重建期间的DML变更,完成后合并增量数据 ‌。
  3. 性能对比‌ ‌

    方式速度并发支持适用场景
    ONLINE较慢✅ 支持高并发生产环境
    ONLINE较快❌ 阻塞维护窗口或无业务时段

🔧 二、进阶用法与注意事项

  1. 指定表空间与存储参数‌ ‌

    CREATE INDEX idx_name ON table_name(column) ONLINE TABLESPACE users PCTFREE  INITRANS;

    • TABLESPACE:索引存储的表空间,避免与数据争用I/O。
    • PCTFREE:预留块空间比例(默认10%),防止频繁分裂。
  2. 大表优化建议‌ ‌58

    • 并行创建‌(企业版支持):

      CREATE INDEX idx_name ON table_name(column) ONLINE PARALLEL 4;

    • 避开高峰期‌:重建亿级大表索引时,监控log file parallel write等等待事件 ‌。
  3. 索引类型扩展

    • 联合索引‌:CREATE INDEX idx_multi ON table(col1, col2) ONLINE;
    • 函数索引‌:CREATE INDEX idx_func ON table(UPPER(name)) ONLINE;

️ 三、操作注意事项

  1. 适用场景

    • 必须使用ONLINE的场景:7x24小时服务、高并发业务表 ‌。
    • 可不用ONLINE的场景:小型表、维护窗口期 ‌。
  2. 限制与风险

    • 空间消耗‌:需额外存储日志表,确保表空间充足 ‌。
    • 兼容性‌:ONLINE不支持位图索引、聚簇索引 ‌。
  3. 操作后验证

    • 检查索引状态:

      SELECT index_name, status FROM user_indexes WHERE table_name='表名';

    • 查看索引字段:

      SELECT * FROM all_ind_columns WHERE index_name='索引名';


💎 四、总结建议

  • 生产环境必选‌:始终使用ONLINE选项创建索引,避免锁表导致业务中断 ‌。
  • 性能权衡‌:对大表启用并行度(PARALLEL),结合业务低峰期操作 ‌。
  • 索引设计原则‌:仅对高频查询列建索引,避免过度索引影响DML效率 ‌。

可通过 ALTER INDEX ... REBUILD ONLINE; 在线重建现有索引(11g+优化锁机制)‌67。选项

http://www.dtcms.com/a/271171.html

相关文章:

  • 【内核基础精讲】I2C 子系统核心概念与结构全解析
  • 类与对象【下篇】-- 关于类的其它语法
  • 蓝凌EKP产品:属性转换器系统优化
  • c语言学习_函数递归2
  • 70、【OS】【Nuttx】【构建】配置 stm32 工程
  • STM32继电器万能控制设备
  • 【04】MFC入门到精通——MFC 自己手动新添加对话框模板 并 创建对话框类
  • SpringBoot集成文件 - 大文件的上传(异步,分片,断点续传和秒传)
  • 数据结构基础准备:包装类 泛型 泛型的上界 密封类
  • 零知开源——STM32F407VET6驱动SHT41温湿度传感器完整教程
  • 2023年全国青少年信息素养大赛Python编程小学组复赛真题+答案解析-北京赛区
  • idea 常用快捷键
  • Mysql中的日志-undo/redo/binlog详解
  • 学习open62541 --- [79] 在docker中运行open62541工程
  • pytorch chunk 切块
  • 【C++】容器适配器 + stack/queue/deque详解
  • Java基础,反射破坏封装性 - 单例模式的崩塌
  • 掌握PDF转CAD技巧,提升工程设计效率
  • 第四节 chatPDF
  • 机器视觉之工业相机讲解
  • unity animtor播放动画的指定位置
  • spring boot使用mybatis-plus实现分页功能
  • C++学习笔记三
  • MATLAB基于voronoi生成三维圆柱形
  • Token 和 Embedding的关系
  • 基于AOP+Redis的简易滑动窗口限流
  • C#基础篇(10)集合类之列表
  • 列表页智能解析算法:大规模数据采集的核心引擎
  • 2024-2025-2 山东大学《编译原理与技术》期末(回忆版)
  • 【ARM嵌入式汇编基础】- 操作系统基础(二)