免费注册 查看新帖 |

Chinaunix

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

关于ORACLE 使用UPDATE的速度问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-10 14:32 |只看该作者 |倒序浏览
现有这样一个更新:
create tabel tmp1
(
        yhbh varchar(10)
        fy number(12,2)
)
有30万条记录!
create table tmp2
(
        yhbh varchar(10)
        fy number(12,2)
)
有180万条记录!

update tmp1 a
set a.fy = (select b.fy from tmp2 b where a.yhbh = b.yhbh)

这条语句执行了6分钟!
环境是:服务器是sum的(只知道是10多万一台的,具体配置不知道……不好意思),缓冲池也有800M的空间,init.ora里的参数配置不算太低。但执行时间是不是有点慢啊!同样的更新,我在mssqlserver 里只用了8秒!

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2004-06-10 14:40 |只看该作者

关于ORACLE 使用UPDATE的速度问题

呵呵,是吗?你看看你的两个表是否建立了索引啊?就是在YHBH这个字段上!还有回滚段啊。

论坛徽章:
0
3 [报告]
发表于 2004-06-10 14:56 |只看该作者

关于ORACLE 使用UPDATE的速度问题

对于少量表的操作,sqlserver比oracle或者sybase要快很多,即使条件完全一样,俺做过测试!
oracle的优势是大量的并发操作,是不是为了一致性、安全性、可维护性等等因素大型数据库要付出更多资源?

论坛徽章:
0
4 [报告]
发表于 2004-06-10 15:32 |只看该作者

关于ORACLE 使用UPDATE的速度问题

谢谢两位的答复,我在较大数据的表中建了索引,但……好像不会影响这么大吧……现在都不知道什么原因。郁闷啊!还有在做数据量大的查询时,如2000万条记录,都是查到一半就提示出错:end of file ,communication channel。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
5 [报告]
发表于 2004-06-10 18:36 |只看该作者

关于ORACLE 使用UPDATE的速度问题

是的,ORA-03113错误,比较烦人的。

论坛徽章:
0
6 [报告]
发表于 2004-06-11 14:22 |只看该作者

关于ORACLE 使用UPDATE的速度问题

换个写法试试。
update tmp1 a
set a.fy = b.fy
from  tmp1 a  tmp2 b
where a.yhbh = b.yhbh)

论坛徽章:
0
7 [报告]
发表于 2004-06-11 15:00 |只看该作者

关于ORACLE 使用UPDATE的速度问题

原帖由 "zhp317" 发表:
换个写法试试。
update tmp1 a
set a.fy = b.fy
from  tmp1 a  tmp2 b
where a.yhbh = b.yhbh)


这个对吗,oracle能这么写吗?

论坛徽章:
0
8 [报告]
发表于 2004-06-11 17:13 |只看该作者

关于ORACLE 使用UPDATE的速度问题

update tmp1 a
set a.fy = b.fy
from tmp1 a tmp2 b
where a.yhbh = b.yhbh)

这是mssql的写法,oracle是不支持的。

论坛徽章:
0
9 [报告]
发表于 2004-07-08 11:03 |只看该作者

关于ORACLE 使用UPDATE的速度问题

UP一下

论坛徽章:
0
10 [报告]
发表于 2004-07-08 11:44 |只看该作者

关于ORACLE 使用UPDATE的速度问题

update tmp1 a
set a.fy = (select b.fy from tmp2 b where a.yhbh = b.yhbh)

我觉得问题可能是出现在每次update一条记录都会执行一次select b.fy from tmp2 b where a.yhbh = b.yhbh ,更新30万条记录就需要执行
30万次的查询,才花6分钟,应该不算太久吧.hehe.
一点愚见,也不知道是不是那么回事.
不过为什么mssqlserver会那么快就搞不清楚了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP