提问:提高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秒左右,有什莫办法提高效率吗
...全文
115 10 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
路过,学习了
学校企业网上订餐预约系统 源码描述: 一、源码介绍 1、中学食堂报餐系统,采用了BS架构开发,利用.NET技术和sqlserver数据库进行系统的开发。兼容 手机和web浏览器。由于采用B/S模式,订餐者无须安装第三方软件,能上网就能订餐,甚至可以利用手机上网订餐,使操作更加简便,订餐信息更加准确。 2、本系统实现了智能订餐,方便顾客的使用,同时便于管理员的管理,节省了员工的时间和精力,也避免了食堂食物的浪费。提高了学校食堂的工作效率,优化了学校食堂的管理。 二、主要功能 1、订餐教师管理 管理学校教师:添加、删除、查询、编辑教师基本信息。 1.1.1 添加订餐教师 输入教师名称、职工号、设置教师的用户名、密码: 1.1.2 编辑已有订餐教师信息 1.1.3 查询订餐教师 2.今日订餐 可查看当天的订餐情况:距离订餐结束的时间,订餐人数等。 3.订餐查询 选择订餐日期,查看所选日期的订餐详情。 4.帐号设置 4.4.1 密码修改 4.4.2 找回密码提问设置 4.4.3 退出登录 2、订餐教师登录 1.在线订餐 1.1.1 连续预定 选择订餐起始日期、结束日期、订餐类型等,提交订餐。 1.1.2 今日预定 1.1.3 单日预定 选择订餐日期和订餐类型,提交订餐。 2.我的订餐 查看自己的所有订餐记录 3.取消订餐 勾选要取消的订单,点击“取消订餐”即可。 4.密码修改 5.退出登录 三、注意事项 1、开发语言:VB.net,数据库为SqlServer2008 2、数据库文件在DB文件夹中,附加即可 3、管理员登录帐号:admin 登录密码:a25175

17,082

社区成员

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

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