提问:提高sql效率

bhwhy 2009-01-20 09:13:43
根据条件进行表的更新,操作在两个表进行
UPDATE
MES.TEDAD010 B
SET
CONVERT_FLG='1',
OperateDT1 = PEDAB009_GET_OPERATE_DT(Spare1_01, Device_ID1),
Floor_CD1 = pedab009_get_floor_cd(Device_ID1),
Organization_CD1 = pedab009_get_organization_cd(Device_ID1)
WHERE
EXISTS
(
SELECT 1
FROM TEDAM010 A
WHERE
A.KEY3(+) = B.Device_ID1 AND
A.JOB_CD = 'EDA' AND
A.KEY1 = '100' AND
A.KEY2 = '110' AND
B.CONVERT_FLG='0'
)
AND CONVERT_FLG='0';
其中PEDAB009_GET_OPERATE_DT,pedab009_get_floor_cd,pedab009_get_organization_cd都是函数

pedab009_get_floor_cd的内容(其他两个函数也类似):
SELECT
BODY2
INTO
RET_FLOOR_CD
FROM
TEDAM010
WHERE
JOB_CD = 'EDA' AND
KEY1 = '100' AND
KEY2 = '110' AND
KEY3 = V_DEVICE_ID;

如果TEDAD010表有5000条数据的话,用时8秒左右,有什莫办法提高效率吗
...全文
121 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bhwhy 2009-01-20
  • 打赏
  • 举报
回复
自己解决了。方法和jinjazz 得差不多
阿三 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 adamxgl 的回复:]
我劝你最好你这段程序用存储过程来完成,使用cursor效率会好一些

还有最好不要使用左连接,那个太耗时间了
[/Quote]
游标的效率好像不会提升效率,你的那几个函数是什么样的,是否使用了绑定参数
jinjazz 2009-01-20
  • 打赏
  • 举报
回复
你可以把三个子查询合并,类似


create table t1(f1 int, f2 int,f3 int);
create table t2(f1 int, f2 int,f3 int);

insert into t1 values(1,2,2);
insert into t1 values(2,3,3);
insert into t2 values(1,3,5);
insert into t2 values(3,4,6);


update t1 set (f2,f3)=(select f2,f3 from t2 where f1=t1.f1)
where exists(select 1 from t2 where f1=t1.f1);

select * from t1;

drop table t1;
drop table t2;
/*
F1 F2 F3
1 3 5
2 3 3
*/
ericxieforever 2009-01-20
  • 打赏
  • 举报
回复
把那三个函数的具体内容贴出来看看
bhwhy 2009-01-20
  • 打赏
  • 举报
回复
高手指点下阿
bhwhy 2009-01-20
  • 打赏
  • 举报
回复
ORACLE 不支持update 表1 set 字段=b.字段 from 表1 a ,表2 b on a.字段=b.字段这种语法吧。
jinjazz 2009-01-20
  • 打赏
  • 举报
回复
你这样相当于3个子查询,你看看用表连接来更新,类似

update 表1 set 字段=b.字段 from 表1 a ,表2 b on a.字段=b.字段
bhwhy 2009-01-20
  • 打赏
  • 举报
回复
我是用存储过程和函数来做的,耗时4秒,TEDAM010表中 JOB_CD,KEY1 , KEY2 ,KEY3我建了索引,效果看不出。使用游标效率会高一些吗
adamxgl 2009-01-20
  • 打赏
  • 举报
回复
我劝你最好你这段程序用存储过程来完成,使用cursor效率会好一些

还有最好不要使用左连接,那个太耗时间了
wind__dance 2009-01-20
  • 打赏
  • 举报
回复
路过,学习了

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧