【问题标题】:Any better way to add multiple-column index on a oracle table with hundreds of millions of rows?在具有数亿行的 oracle 表上添加多列索引的更好方法?
【发布时间】:2014-04-28 05:32:30
【问题描述】:
我有一张几亿数据的表,上面没有任何索引,现在想在上面添加多列索引,同时这个操作不能影响在线环境,有什么方法可以尽量减少对在线环境的影响?
我试过直接添加索引:
create index give_integral_index on GIVEINFO(ssoid, integral_operate, operatestatus, source_name);
失败了。
【问题讨论】:
标签:
sql
oracle
optimization
indexing
【解决方案1】:
你可以考虑:
- 添加
ONLINE 子句 - 这允许在创建索引期间运行 DML,但会减慢速度
- 添加
PARALLEL 子句 - 这可能比 DOP(并行度)快几倍,但它需要足够的资源让所有从属服务器完成它们的工作。如果您的资源非常有限,请不要使用它或使用低 DOP。它也与ONLINE 子句互斥
- 添加
NOLOGGING 子句 - 这将重做日志写入,使其运行更快,但在恢复的情况下前滚将是不可能的
我会尝试在没有 DML/DDL 活动的窗口中使用具有最高 DOP 的 NOLOGGING + PARALLEL。