多表关联的Update更新很慢,怎么办?

superc1z 2005-05-18 05:28:41
update group_cde c
set c.num=(
select sum(num)
from group_temp a
where a.group_id = c.group_id
);


这句话太慢了怎么办啊?用游标会快一点吗? 还是这句话快?

这里我想问的是update中要关联多表应该怎么样做才能快一点?


请大家指教,谢谢
...全文
1188 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxc 2005-05-19
  • 打赏
  • 举报
回复
由于是关联子查询,子查询会循环执行父查询的行数遍,所以索引很重要
如果子查询是个复杂的统计结果,用临时表也是个方法。
railgunman 2005-05-19
  • 打赏
  • 举报
回复
按理说直接写在update里面,应该是最快的,
因为update里面也有游标,不过是oracle本身为了
更新数据而建的,
我觉得你的那句更新语句速度应该很快的吧?
在group_temp表上增加字段group_id的索引
guolibin 2005-05-18
  • 打赏
  • 举报
回复
是写错了
superc1z 2005-05-18
  • 打赏
  • 举报
回复
谢谢,请教一下: "WHERE B.[..]=A.[..]"这句话是不是写错了,B就是A表出来的,是不是应该
B.group_id = C.group_id 还是A.group_id = C.group_id?

再次谢谢
guolibin 2005-05-18
  • 打赏
  • 举报
回复
曾经作过类似的,大致方法如下,可以提高效率
1、创建一个临时表T,结构与C相同
2、通过C与A的关系查询:如下
INSERT INTO T
(
SELECT C.[OTHER COL],B.NUM
FROM group_cde C
,(SELECT A.GROUP_ID,SUM(A.NUM) AS NUM
FROM group_temp A
GROUP BY GROUP_ID
) B
WHERE B.[..]=A.[..]

)
3、删除C表数据(或按条件)
4、把T表数据写入C表

17,089

社区成员

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

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