增加 大量数据 表字段

本文详细介绍了在数据库中批量修改大量数据表结构时的优化策略,包括创建备份表、修改备份表特性、数据迁移、结构变更等步骤,以减少执行速度的下降并提高效率。

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

今天公司有个小需求,然后需要增加两个字段.可是执行下来特别慢.上网看了下说是因为大量数据造成的.

参考网上例子速度果然快了很多.故记录以备参考!


      当你去修改一个有大量数据表的结构时候 程序会去整表扫描 故而执行速度会慢下来很多.

   -- 一般数据量不大(50W以内) 可以 直接进行修改 如

   alter table tab_name  add ( column_100 int(10)  default '0' comment'增加的表字段')


但是当有大量数据(大于50w)的时候 因为直接修改程序会作整表扫描 所以速度会很慢..所以可以先将表数据导出 然后对空表进行操作

-- 1. 创建备份表tab_name_bak     确定表空间 ( tablespace_name要存放的地方)

   create table tab_name_bak tablespace tablespace_name as select  a,b,c  from table_name where 0=1;

  -- 2. 修改备份表 让表数据在插入的时候不出日志

  alert table tab_name_bak  nologging;

  -- 3. 数据备份,直接大批量模式插入表,并行,只出少量日志,速度很快。

   insert /*+ append */ into tab_name_bak select /*+ parallel(a,4) */ * from tab_name a;commit;

  -- 4 .删除tab_name数据,回滚段不再存放任何可被恢复的信息。当命令运行后,数据不能被恢复,因此可以节省调用的资源,执行时间也会很短.

        --降低表的高水位线HWM,将之清空恢复为0,后面即使数据恢复,高水位线HWM也会比以前低,可以提高运行速度。

  truncate table tab_name;

  -- 5. 修改表结构

 alter table tabl_name add column_100 varchar2(50).

  -- 6. 不输出日志

  alter table tmmsf99 nologging;

  -- 7 .数据恢复

  insert /*+ append */ into tab_name(字段名) select /*+ parallel(b,4) */*  tab_name;

  commit; 

  -- 8. 修改原表为输出日志

  alter table tab_name logging.

  -- 9. 删除tab_name数据,回滚段不再存放任何可被恢复的信息。当命令运行后,数据不能被恢复,因此可以节省调用的资源,执行时间也会很短;

       --降低高水位线HWM,清空恢复为0

  truncate table tab_name_bak,

  -- 10. 删除备份表结构

 drop tabletmmsf99_bak.


表结构变更过程中,如果删除进程,只能删除正在做的字段,其他字段照常执行,最终结果就是表结构变更后会少字段,需要将少掉的字段再增加上,同时要考虑表结构头文件与表结构的一致性,这个需要特别注意。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值