oracle表数据量大时建立索引,需要加上online参数

本文介绍在Oracle数据库中建立索引的方法,特别是针对大数据量情况下的在线建立索引技巧,包括使用online参数避免阻塞DML操作及如何正确关闭并发以保持数据库性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在oracle建立索引时,会阻塞对该表的DML操作,select不属于DML,是DQL。


所以在大数据量的情况下建立索引,而此时会对该表进行DML操作时需要在建索引语句后

加上online参数。同时建立索引时可以用并发,记得建完之后要关掉并发否则会影响

oracle性能。

### 如何在 Oracle 数据库中统计数据量 #### 使用 `ANALYZE` 命令获取统计数据 为了计算特定中的数据量,可以使用 `ANALYZE TABLE ... COMPUTE STATISTICS` 语句。这会更新有关该及其索引的各种元数据信息,包括行数、块数以及平均行长度等重要指标[^1]。 ```sql ANALYZE TABLE employees COMPUTE STATISTICS; ``` 此命令执行完毕后,可以通过查询 `USER_TABLES` 或者 `ALL_TABLES` 视图来查看最新的统计信息: ```sql SELECT num_rows FROM USER_TABLES WHERE table_name='EMPLOYEES'; ``` 对于整个模式下的所有格批量处理,则可通过创建存储过程实现自动化操作。下面是一个示例性的 PL/SQL 存储过程定义: ```plsql CREATE OR REPLACE PROCEDURE analyze_all_tables AS BEGIN FOR rec IN (SELECT table_name FROM user_tables) LOOP EXECUTE IMMEDIATE 'ANALYZE TABLE ' || rec.table_name || ' COMPUTE STATISTICS'; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error analyzing table ' || rec.table_name); END LOOP; END; / ``` 需要注意的是,在较新的版本中推荐采用 `DBMS_STATS.GATHER_TABLE_STATS()` 函数代替传统的 `ANALYZE` 方法来进行更精确高效的统计收集工作。 #### 动态性能视图查询实数据量 除了通过上述方式定期刷新统计外,还可以利用动态性能视图(`V$TABLESPACE`, `V$SEGMENT_STATISTICS`)即获得某些对象当前占用的空间小情况。例如要了解某段间内某个空间内的各个段(segment)的变化趋势,可参照如下 SQL 片段构建历史记录并以分析[^2] : ```sql CREATE TABLE top_get_table_data AS SELECT SYSDATE AS riqi, owner, segment_name, ROUND(SUM(bytes)/1024/1024,2) MB FROM dba_segments GROUP BY owner,segment_name; -- 定期插入新纪录以便跟踪变化... INSERT INTO top_get_table_data(riqi,owner,segment_name,mb) WITH latest_stats AS ( SELECT owner, segment_name, SUM(bytes)/1024/1024 mb FROM dba_segments GROUP BY owner,segment_name ) SELECT SYSDATE, ls.owner, ls.segment_name, ls.mb FROM latest_stats ls LEFT JOIN top_get_table_data t ON ls.owner=t.owner AND ls.segment_name=t.segment_name WHERE t.riqi IS NULL; -- 只添最新未记录过的条目 ``` 以上方法提供了两种同角度去理解和掌握Oracle数据库内部各张的实际容量状况;一种是从静态的角度出发基于预先建立好的统计资料来做决策支持,另一种则是借助于系统自带的监视工具集捕捉瞬状态用于短期规划调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值