大数据表关联更新--效率问题

tw2050 2012-12-25 09:51:42
现在有两张表A表, B表。

A表表结构为: (大概3500万记录)
CardNo, Type, BeginAccessTime, EndAccessTime
B表表结构为: (大概25000万记录)
CardNo, Type, Name, Sex, EndTime

除了Type为integer型, 其它字段都为字符串型
现在要求通过A,B表的CardNo, Type字段, 把B表的EndTime数据更新到A表的EndAccessTime字段.

目前使用以下SQL:
Update A Set EndAccessTime = (Select EndTime From B Where A.CardNo = B.CardNo Ando A.Type = B.Type)

发现数据库执行了10几个小时还没执行完。 效率太低了。 请求高手, 有什么方法或SQL提高其更新速度。。

谢谢。
...全文
548 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctbuxiangtao 2012-12-27
  • 打赏
  • 举报
回复
大数据操作,建议先用两张表关联查询,然后将数据插入新表,然后再将新表的数据写回要更新的那张表
Kael Z 2012-12-27
  • 打赏
  • 举报
回复
楼主,海量数据尽量不要UPDATE,建议你用INSERT处理 CREATE TABLE C AS SELECT A.CARDNO, A.TYPE, A.BEGINACCESSTIME, B.ENDTIME FROM A, B WHERE A.CARDNO = B.CARDNO AND A.TYPE = B.TYPE; DELETE FROM A WHERE EXISTS (SELECT ENDTIME FROM B WHERE A.CARDNO = B.CARDNO AND A.TYPE = B.TYPE); INSERT INTO A SELECT * FROM C; 这样的话效率会高很多的。
善若止水 2012-12-27
  • 打赏
  • 举报
回复
一 对a表和b表的CardNo, Type两列建立索引 二 用 merge函数来代替update
Kael Z 2012-12-27
  • 打赏
  • 举报
回复
楼主,海量数据尽量不要UPDATE,
linwaterbin 2012-12-26
  • 打赏
  • 举报
回复
根据楼上的。先建立索引 可以考虑对视图进行update,这也是Oracle所特有的
UPC子夜 2012-12-26
  • 打赏
  • 举报
回复
一次性更新这么多数据 肯定会慢的 再怎么优化也是杯水车薪 我们系统升级 删除2000万条数据 卡了两个小时都没跑完 楼主可以用动态sql 加一个循环 每次更新10000条 然后提交 这样跑起来还是可以的,对回滚段要求小一些
tw2050 2012-12-25
  • 打赏
  • 举报
回复
引用 1 楼 yinan9 的回复:
有没有创建相关索引呢?
不好意思, 对数据库相关效率问题我是一窍不通。 首先谢谢你的回复, 如果是你的话, 你认为需要建什么索引才合适呢?
yinan9 2012-12-25
  • 打赏
  • 举报
回复
有没有创建相关索引呢?
yinan9 2012-12-25
  • 打赏
  • 举报
回复
具体得看业务逻辑 你的A,B中CardNo, Type这两个字段有没有重复记录的。查看下有没有索引已经创建了, 按照这么大的数据量,表不可能没有索引

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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