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。选项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值