UPDATE 语句执行效率问题

SanndyTian 2007-06-06 01:10:18
在一个ASP程序中要更新一个表t,大概有20万条数据需要更新,总数据量在100W以上。在更新的时候,需要到另外一个表中c检索与t.a,t.b相匹配的字段。
现有的查询逻辑是
UPDATE t SET .... WHERE t.A || t.B IN (SELECT c.a || c.b from c where c.ym='200706')

这个对c表的子查询大概能检索出150-200条记录。

这个代码在开发环境下没有问题,但是这样在客户的测试服务器上出现ORA-01013错误。有没有好地解决办法?这个系统规定不能用任何存储过程,触发器,视图等。当然更不可能更改数据库的任何参数。

请大家提供思路,尤其是做过ASP对大数据量处理的朋友。谢谢。

...全文
332 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongliang110 2007-06-08
  • 打赏
  • 举报
回复
就用lixin5678(li) 的方法
lixin5678 2007-06-08
  • 打赏
  • 举报
回复
WHERE t.A || t.B IN (SELECT c.a || c.b from c where c.ym='200706')
这样用效率非常低,强烈不推荐(不仅索引不起作用,还要把所有记录的A,B进行连接运算)
本人认为应该这样

UPDATE t SET
...
WHERE
Exists(select a from c where c.ym='200706' and t.A=c.a and t.B=c.b)
jscxh 2007-06-07
  • 打赏
  • 举报
回复
UPDATE t SET .... WHERE t.A || t.B IN (SELECT c.a || c.b from c where c.ym='200706')

需要看C表中的数据量大小的...

如果很大的话,最好使用 exits操作
CathySun118 2007-06-07
  • 打赏
  • 举报
回复
ls的方法不错阿
hongqi162 2007-06-06
  • 打赏
  • 举报
回复
UPDATE t SET (col1,col2)=
(select c.col1,c.col2 from c where c.a=t.a and c.b=t.b and c.ym='200706')

17,086

社区成员

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

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