分区表按rowid批量update的性能问题

leonwu1981_2 2013-10-22 09:46:08
最近碰到一个难题,有一个分区表有近4000万数据,需要把几个字段全部update一遍。
我的思路是这样的:
先按分区循环,每个分区再按10000条/批循环
批量执行update tableA PARTITION (P1) set col1=?,col2=? where rowid=?;
最后发现是批量执行update语句性能慢。大概10000条要20几秒;tableA的每个分区只有几十万的数据,而其他的非分区表,200万记录,10000条update只要0.3秒左右,性能差别太大了!

...全文
390 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ze710 2014-01-16
  • 打赏
  • 举报
回复
用merge into呢 效率是不是可以提高啊
wqkjj 2013-10-30
  • 打赏
  • 举报
回复
这个肯怕要看你更新的字段是什么类型,如果更新会导致出现大量的迁移现象发生,自然会慢很多。 另外,分区表同时使用rowid更新,很可能会导致物理IO竞争,你应该看看物理IO的情况。
leonwu1981_2 2013-10-22
  • 打赏
  • 举报
回复
补充:update的字段没索引,也不是分区字段,不会导致迁移
第1章 概述 1. BI介绍 2. Oracle介绍与安装 2.1 Oracle安装 2.2 Oracle 默认用户 2.3 服务器连接 3. PL/SQL Developer工具 4. Oracle用户和权限 4.1用户和权限 4.2角色 第2章 SQL数据操作和查询 1. SQL简介 2. 查询 2.1查询结构 2.2查询顺序 . 2.3聚合函数 . 3. 创建表和约束 3.1 Oracle常用数据类型 3.2创建表 3.3表的约束 4. 数据操作语言(DML) 4.1数据插入 4.2更新数据 4.3删除数据 4.4 TRUNCATE(DDL命令) 5. 操作符 5.1算术运算 5.2关系运算和逻辑运算 5.3字符串连接操作符(||) 6. 高级查询 6.1 DISTINCT操作 6.2 NULL操作 6.3 IN 操作 6.4 BETWEEN…AND… 6.5 LIKE模糊查询 6.6 集合运算 6.7 连接查询 第3章 子查询和常用函数 1. 子查询 2. Oracle中的伪列 2.1 ROWID 2.2 ROWNUM 3. Oracle单行函数 3.1字符函数 3.2数字函数 3.3日期函数 3.4转换函数 3.5其他常用函数 4. Oracle分析函数 4.1 分析函数介绍 4.2 分析函数种类和用法 4.3 行列转换 第4章 表空间、数据库对象 1.同义词 2.序列 3.视图 4.索引 4.1 索引介绍 4.2 索引种类 4.3 索引优缺点 4.4 索引失效 5.表空间 6.表分区 6.1表空间及分区表的概念 6.2表分区的具体作用 6.3.表分区的优缺点 6.4表分区的几种类型及操作方法 6.5有关表分区的一些维护性操作 第5章 PL/SQL程序设计 1. PL/SQL简介 2. PL/SQL基础 2.1声明 2.2条件控制 2.3循环控制 2.4游标 2.5动态SQL 3.创建存储过程 4.创建自定义函数 5.异常处理 6.同步数据 7.创建包 8.创建日志 第6章

3,496

社区成员

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

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