在一个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对大数据量处理的朋友。谢谢。

解决方案 »

  1.   

    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')
      

  2.   

    UPDATE t SET .... WHERE t.A || t.B IN (SELECT c.a || c.b from c where c.ym='200706')需要看C表中的数据量大小的...如果很大的话,最好使用 exits操作
      

  3.   

    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)