查看: 25922|回复: 20

【讨论】update一个超大的表,如何提升速度

[复制链接]
论坛徽章:
5
ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:29优秀写手
日期:2014-08-28 06:00:14沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
发表于 2014-8-22 14:41 | 显示全部楼层 |阅读模式
有一个4亿记录的表,未分区,没索引。新增加了一个varchar2型的字段。现在想把新增加的这个字段全表统一update为一个特定的字符串。速度极其缓慢,看了看系统估算的剩余时间估计好几天,估计undo也撑不住。这种全表更新,把某个字段更新为一个定值,有什么办法加快速度呢
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2014-8-22 15:13 | 显示全部楼层
用CTAS

使用道具 举报

回复
认证徽章
论坛徽章:
284
生肖徽章2007版:虎
日期:2014-06-23 20:17:04生肖徽章2007版:虎
日期:2014-09-18 12:50:09生肖徽章2007版:虎
日期:2014-11-14 14:21:28生肖徽章2007版:虎
日期:2014-06-23 20:42:17生肖徽章2007版:虎
日期:2014-06-23 20:42:17秀才
日期:2017-04-06 13:42:06秀才
日期:2017-04-06 13:41:23秀才
日期:2017-03-28 15:59:38秀才
日期:2017-03-28 15:11:09红宝石
日期:2017-04-06 13:47:15
发表于 2014-8-22 15:14 | 显示全部楼层
rowid+ bulk collect +forall

使用道具 举报

回复
认证徽章
论坛徽章:
22
ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00马上加薪
日期:2014-10-21 18:48:25马上加薪
日期:2014-10-21 18:48:312015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39沸羊羊
日期:2015-06-11 17:08:14巨蟹座
日期:2015-07-10 09:11:44天枰座
日期:2016-01-18 10:58:39秀才
日期:2016-02-18 10:08:14秀才
日期:2016-06-23 14:15:06
发表于 2014-8-22 15:26 | 显示全部楼层
数据库版本是啥,如果是11g考虑用虚拟列

使用道具 举报

回复
论坛徽章:
22
2014年世界杯参赛球队: 哥斯达黎加
日期:2014-06-06 15:02:04沸羊羊
日期:2015-06-17 14:51:07天枰座
日期:2015-07-17 09:51:12金牛座
日期:2016-03-21 21:10:40摩羯座
日期:2016-03-29 15:07:30娜美
日期:2016-06-22 19:49:29奥运会纪念徽章:篮球
日期:2016-09-02 09:45:25奥运会纪念徽章:现代五项
日期:2016-09-23 16:25:05山治
日期:2018-01-04 21:26:162015年新春福章
日期:2015-04-27 10:18:48
发表于 2014-8-22 16:00 | 显示全部楼层
创建一个新的表,包含新在字段,要不要分区就看后续是否需要,设置新表nologging属性,然后将原表的数据插到创建的新表中,使用append方式
insert /*+ append */ into 新表 select t.*,特定字符串 from 原表 t;


试试速度是不是能加快。。。。


使用道具 举报

回复
论坛徽章:
2
马上有房
日期:2014-08-11 14:35:17优秀写手
日期:2014-08-19 06:00:12
发表于 2014-8-22 16:22 | 显示全部楼层
整张表,其他所有列都没有索引么?如果其他列有索引,是有办法更新的

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-09-23 06:00:14
发表于 2014-8-22 16:27 | 显示全部楼层
可以建张表加主键字段和定值两个维度,用CREATE TABLE AS 创建,然后建个视图。

使用道具 举报

回复
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
发表于 2014-8-22 17:03 | 显示全部楼层
一般地,重建表是最快的了,除非比如你的字段有CLOB且存储了非常大的值

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2014-8-22 20:26 | 显示全部楼层
用另一个表,别改结构

使用道具 举报

回复
论坛徽章:
533
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2014-8-22 22:12 | 显示全部楼层
如果是11g, 新增的列设置为NOT NULL, 并给予DEFAULT, 此时不会修改数据块,但是看起来每一行都有了值。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表