请教,我需要根据两张表的对比结果进行数据的批量更新(数据量比较多,运行效率低下),请教,我的这些语句如何能更好的优化以提升效率?
update Eit a set ( 
user_id, 
full_name, 
sex, 
birthday, 
native_place, 
duty_code, 
job_code, 
company_id, 
dept_id, 
email, 
mobile, 
phone, 
update_date, 
ehr_pk_psndoc, 
user_type, 
his_stats 
)=( 
select 
user_id, 
full_name, 
sex, 
TO_DATE(birthday, 'YYYY-MM-DD'), 
native_place,dutycode, 
job_code, 
company_id, 
dept_id, 
email, 
mobile, 
phone, 
sysdate,  
ehr_pk_psndoc, 
'0', 
'1' 
 from v_ehr_eit_users b 
 where b.user_name=a.user_name) 
where exists(select 1 from v_ehr_eit_users b where b.user_name=a.user_name)

解决方案 »

  1.   

    EIT表有索引:USER_NAME
    V_EHR_EIT_USERS为视图
    这个更新效率怎么能提高速度呢?
      

  2.   

    多少数据量?》
    数据量大的话可以考虑分段commit
      

  3.   

    V_EHR_EIT_USERS这个试图是不是包含对Eit的查询,并且是否更新了Eit的主键?
      

  4.   

    V_EHR_EIT_USERS不包含对EIT的查询,EIT有主键
      

  5.   

    有索引的话,绝对会影响速度的,先要去掉,之后再分段commit; 1000行或者,....行提交一次。还有就是加大回滚段空间,加大cacsh.