首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

UPDATE 语句执行效率有关问题

2012-03-13 
UPDATE 语句执行效率问题在一个ASP程序中要更新一个表t,大概有20万条数据需要更新,总数据量在100W以上。在

UPDATE 语句执行效率问题
在一个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对大数据量处理的朋友。谢谢。



[解决办法]
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 ')

[解决办法]
ls的方法不错阿
[解决办法]
UPDATE t SET .... WHERE t.A || t.B IN (SELECT c.a || c.b from c where c.ym= '200706 ')

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

如果很大的话,最好使用 exits操作
[解决办法]
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)
[解决办法]
就用lixin5678(li) 的方法

热点排行