oracle数据库数据量较大时更新数据较慢问题

           这今天在研究kettle工具,是一款国外纯java开发的开源ETL工具,抽取数据确实非常方便,大家有空可以去下载下来试试看,方便之处在于它不用安装,解压完了就能直接用了(必须提前配置jdk和jre环境到系统环境中)。今天要说的不是这款软件,问题是由使用这个软件引起的,我在抽取数据后需要完成一个更新操作语句如下:

update case_person_saxx a set a.case_id=(select id from case_xzcf b where b.app_id = a.app_id) ;

update invole_case_unit_saxx a set a.case_id=(select id from case_xzcf b where b.app_id = a.app_id);

 上面的语句中case_person_saxx表和case_xzcf 表中数据量大概在16万条左右,说起来也不是特别大,但是这个语句执行起来特别的慢,我等了半个多小时都没执行完,后来建索引稍微快一点,在网上找到一种更快捷的更新语句(因为我数据库基础不好很多语句不熟悉,呵呵!大神来看到了别笑话我就行!)如下:

merge into case_person_saxx t
using (select max(id) as id, app_id from case_xzcf group by app_id) s
on (t.app_id = s.app_id)
when matched then
  update set t.case_id = s.id;


  merge into invole_case_unit_saxx t
using (select max(id) as id, app_id from case_xzcf group by app_id) s
on (t.app_id = s.app_id)
when matched then
  update set t.case_id = s.id;

测试了一下 7秒钟就完成了更新,瞬间让我觉得自己懂得太少,真心需要好好学习。

记下来以便自己以后查阅,如果有同样困扰的同学可以试试这个语句。

猜你喜欢

转载自gyl892014311.iteye.com/blog/2147584