请教一个SQL:从B表查结果更新A表,B表中没有的记录在A表中不用更新
我有两个表,A表有几百万的数据,关键字段为CATA_ID,还有一个需要经常更新的字段CATA_SPEC,B表有字段CATA_ID、CATA_SPEC和UPDATE_TIM...
我有两个表,A表有几百万的数据,关键字段为CATA_ID,还有一个需要经常更新的字段CATA_SPEC,B表有字段CATA_ID、CATA_SPEC和UPDATE_TIME。
现在要写一个SQL更新A表CATA_SPEC,更新取值是B表中CATA_ID等于A表CATA_ID,且B表中UPDATE_TIME大于SYSDATE-1,因为A表数据量过大,每次根据这个条件查到的B表记录又不会太多,所以想没有查到B表记录的就不用更新A表了。
我写了以个SQL:
UPDATE A a SET ( A.CATA_SPEC ) =
(SELECT CATA_SPEC FROM B b WHERE b.CATA_ID=a.CATA_ID)
WHERE EXISTS ( SELECT 1 FROM B b WHERE b.CATA_ID=a.CATA_ID AND b.UPDATE_TIME > SYSDATE-1 )
不过这个语句在PL/SQL里面按F5发现执行的时间还是很长。
请问这个更新SQl该怎么写才好?还有没有别的方法可以提高执行效率,比如在哪里建什么索引的? 展开
现在要写一个SQL更新A表CATA_SPEC,更新取值是B表中CATA_ID等于A表CATA_ID,且B表中UPDATE_TIME大于SYSDATE-1,因为A表数据量过大,每次根据这个条件查到的B表记录又不会太多,所以想没有查到B表记录的就不用更新A表了。
我写了以个SQL:
UPDATE A a SET ( A.CATA_SPEC ) =
(SELECT CATA_SPEC FROM B b WHERE b.CATA_ID=a.CATA_ID)
WHERE EXISTS ( SELECT 1 FROM B b WHERE b.CATA_ID=a.CATA_ID AND b.UPDATE_TIME > SYSDATE-1 )
不过这个语句在PL/SQL里面按F5发现执行的时间还是很长。
请问这个更新SQl该怎么写才好?还有没有别的方法可以提高执行效率,比如在哪里建什么索引的? 展开
若以下回答无法解决问题,邀请你更新回答
3个回答
展开全部
b.CATA_ID=a.CATA_ID
这两个字段分别在对应的表里边创建索引
这两个字段分别在对应的表里边创建索引
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
做表连接,不用子查询
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道 通过创建一个 VIEW 的办法, 会不会速度快一点
http://hi.baidu.com/wangzhiqing999/blog/item/767be28f634ddb00c8fc7aba.html
http://hi.baidu.com/wangzhiqing999/blog/item/767be28f634ddb00c8fc7aba.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询