ORACLE大数据表Update处理

 我来答
黑科技1718
2022-10-03 · TA获得超过5858个赞
知道小有建树答主
回答量:433
采纳率:97%
帮助的人:81万
展开全部

  ORACLE中如果表数据量很大(M级或更大) update某个字段是很慢的(如我的HIS项目中更新历史业务流程表 万条记录 用CURSOR来更新 条MIT一次 花了 天也没更新完) 后来尝试过的改进办法有

   把表上的LOGGING取消

   把表上的INDEX取消

  但是依然很慢 无奈下找到这个

  

  在这个主题问答里 ORA官方提了一种处理的办法

   利用CREATE table as select xxxxx的办法来生成一新表T

   在T 上创建与目标表一样的索引

   把目标表删除或RENAME(注意备份以备反悔)

   把T 改名成目标表

  试了一下 果然非常地快 我的任务差不多在 Min就完成了

  如csywdk table_room是一张大表 要删除其中bakfwid在noNewYWFW 中的记录 且要更新bakfwid在imp_table_room中记录的ROOM_LOC为imp_table_room room_loc:

  ( )创建新表

  create table tmp_new_table_room as

  select t ROOM_ID t NEWROOMID t BUILDID t TFH t DKH t BUILD_NO t LAYER_NO t ROOM_NO t ROOM_NAME

  decode(t bakfwid null t ROOM_LOC t room_loc)

  t ROOM_AREA

  t SURTYPE t LAYER_NAME t DEVDEP t CELL t DELFLAG t QXXZ t SJSJLSH t FD t ID t BAKFWID

  from csywdk table_room t left join imp_table_room t on t bakfwid=t bakfwid

  where not exists(select from noNewYWFW t where t bakfwid=t bakfwid)

  ( )创建备份表

  create table Table_room as

  select * from csywdk table_room

  ( )替换原表

  drop table sde table_room

  create table sde table_room as

  select * from tmp_new_table_room

  在这个问答里还提到一句ORA PL/SQL效率相关的话

   能用一句语句处理的任务决不要用多句编程来实现

lishixinzhi/Article/program/Oracle/201311/18980

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
今至电子科技有限公司
2024-08-23 广告
数据库备份是确保数据安全与业务连续性的关键环节。我们上海今至电子科技有限公司高度重视数据保护,定期执行全面的数据库备份策略。这包括使用先进工具和技术,对关键业务数据进行自动化备份,并存储在安全可靠的外部存储介质或云端。通过定期验证备份的完整... 点击进入详情页
本回答由今至电子科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式