SQL语句优化

chengccy 2013-02-02 11:13:56
表A:
id,name,newtime
表B:
id,name,oldtime,newtime;
需求是:
表A的数据在表B中,并且在newtime的10分钟内没有数据就insert到表B,否则update表B中相对应的newtime字段。
由于表A每隔一段时间要更新一次,而这个SQL是在表A更新后就要执行的,所有我用的存储过程,
我是SQL语句是这样写的:
select count(*) into v_number form 表B 
where id=v_id --用的游标来取表A的值
and name=v_name
and newtime between v_newtime - interval '10' minute and v_newtime;
if v_number=0 then
insert into 表B values(v_id,v_name,v_newtime,v_newtime);--情况一
else
update 表B set newtime=v_newtime
where id=v_id
and name=v_name
and newtime between v_newtime - interval '10' minute and v_newtime;--情况二

我发现情况二的话,效率比情况一慢一倍,因为它做了2次扫描。而且感觉第二次有点多此一举;
我想有没有办法,找到了就update。而不是像我写的先告诉这个表里有,然后我再去找个这条数据update?
...全文
1189 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengccy 2013-02-03
  • 打赏
  • 举报
回复
引用 1 楼 ziwen00 的回复:
merge into a using b on xxx when not matched then insert values google it
这个啊,我用过,不过用的少,一下子想不起来了,多谢了,结贴
陈字文 2013-02-02
  • 打赏
  • 举报
回复
merge into a using b on xxx when not matched then insert values google it

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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