联表update速度问题

[复制链接]
查看11 | 回复9 | 2011-12-28 08:44:39 | 显示全部楼层 |阅读模式
有一更新的句子,
UPDATE T1 SET COL1 = (SELECT COL1 FROM T2 WHERE T1.COL2=T2.COL2 AND 条件 ),表1有5000条数据,表2有18万条数据,满足条件的有
5000条记录,两张表在COL2上都有索引,更新一次却需要4分钟,不知怎样才能速度更快?),
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
update (select t1.col1 col1t1,t2.col1 col1t2 from t1,t2 where t1.col2 = t2.col2 and ...)
set col1t1 = col1t2;
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
你t1是全表更新啊后面条件很关键啊 上面有索引吗
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
索引已经建上了 执行计划里也是走索引 不知为什么还费这么长时间!
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
忘了说了条件是针对表2的条件
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
UPDATE T1 SET COL1 = a.col1 from t2 aWHERE COL2=a.COL2 AND 条件
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
原语句是全表进行更新,个人同意2楼的语句。
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
最初由 ShingU 发布
[B]update (select t1.col1 col1t1,t2.col1 col1t2 from t1,t2 where t1.col2 = t2.col2 and ...)
set col1t1 = col1t2; [/B]


SQL> Select * from seer1 t
2;
AB1
T
-------------------------------------------------------------------------------- ----------
MAP_F_DECLAREDETTAXITEMVEH
22
MAP_F_INV_PRINTUSEQUERY
23
MAP_F_INV_PRINTQUERY
24
MAP_F_INV_PCEAANALYZE
25
5481122
26
1234
27
6 rows selected
SQL> Select * from seer t;
AB
T
-------------------------------------------------------------------------------- ----------
MAP_F_DECLAREDETTAXITEMVEH
22
MAP_F_INV_PRINTUSEQUERY
23
MAP_F_INV_PRINTQUERY
24
MAP_F_INV_PCEAANALYZE
25

26

27
6 rows selected
SQL>
SQL> Update (Select x.Ab1 ,y.AbFrom seer1 x,seer y Where x.t=y.t)
2Set ab1 =ab
ORA-01779: 无法修改与非键值保存表对应的列
SQL>
SQL> Update (Select x.Ab1 uu1,y.Abuu2 From seer1 x,seer y Where x.t=y.t)
2Set uu2 =uu1
3;
Update (Select x.Ab1 uu1,y.Abuu2 From seer1 x,seer y Where x.t=y.t)
Set uu2 =uu1
ORA-01779: 无法修改与非键值保存表对应的列
这样应该是不对的,没有这样的update写法吧!
请高手再求证!!!





回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
书上有这样的update写法!
UPDATE TABLE(SELECT projs
FROM dept d WHERE d.dno = 123)p
SET p.budgets = p.budgets + 1
WHERE p.pno IN (123, 456);
但是()里边的结果集(SELECT projs
FROM dept d WHERE d.dno = 123) 应该是从一个表中查询出来的!不然就会报错!
???
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
ORA-01779: 无法修改与非键值保存表对应的列
搜索相关的帖子,有比较详细的说明...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行