免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2442 | 回复: 2
打印 上一主题 下一主题

[求助] 使用外部表对数据表进行批量更新如何提高更新效率?求优化我的语句 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-26 14:25 |只看该作者 |倒序浏览
请教一个问题。
我当前使用Oracle 9i
要做一个批量数据更新的工作。
由于只能通过外部表的方式来做数据更新。所以写了以下Update语句来实现
外部表为exp_table:有3个字段,分别是main_phone, creation_date, last_update_date
内部待更新表为test_table的数据表也包含这3个字段。但还有其他字段。main_phone已建立索引
以下是语句:
UPDATE test_table t1 SET (main_phone, creation_date, last_update_date) = (SELECT main_phone, creation_date, last_update_date FROM exp_table t2 WHERE t1.main_phone = t2.main_phone) WHERE EXISTS (SELECT 1 FROM exp_table t2 WHERE t1.main_phone=t2.main_phone);

以上语句执行下来更新效率不是很高。我更新3000多条数据都要1分钟多一点。
现在我需要更新120W条左右的数据。有没有什么办法可以优化下上面的语句。提供更新效率

论坛徽章:
0
2 [报告]
发表于 2013-05-26 16:40 |只看该作者
刚刚在群里面有朋友建议可以使用复制表的方式来做。
试着在测试库中做了下。
1. 复制外部表生成新表expdata_table
create table expdata_table as select * from exp_table;
2. 设置不写日志
alter table expdata_table nologging;
3. 创建新表main_phone字段的索引
create index expdate_table_in on expdata_table (main_phone);
4. 查看新表的数据量(与外部表的数据量一致)
select count(*) from expdata_table
5. 试着更新数据
UPDATE test_table t1 SET (main_phone, creation_date, last_update_date) = (SELECT main_phone, creation_date, last_update_date FROM expdata_table t2 WHERE t1.main_phone = t2.main_phone)
WHERE EXISTS (SELECT 1 FROM expdata_table t2 WHERE t1.main_phone=t2.main_phone);

速度上是要比通过外部表做批量更新快了。但效率还是不行。
我的这个update语句上是否有可以优化的地方??? 请大家帮忙看看!谢谢

论坛徽章:
13
巨蟹座
日期:2013-10-21 16:01:452015亚冠之全北现代
日期:2015-05-14 11:52:492015年亚洲杯之巴勒斯坦
日期:2015-04-27 08:04:252015年亚洲杯之朝鲜
日期:2015-03-11 18:01:112015年迎新春徽章
日期:2015-03-04 09:48:00摩羯座
日期:2014-12-16 12:22:23子鼠
日期:2014-08-08 15:47:44狮子座
日期:2014-07-28 20:37:15寅虎
日期:2014-06-12 12:09:08巨蟹座
日期:2014-03-18 08:41:18戌狗
日期:2013-12-05 10:15:58巨蟹座
日期:2013-11-08 10:24:51
3 [报告]
发表于 2013-05-26 20:41 |只看该作者
是不是可以用merge?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP