|
原语句
update t_photo_cust_mem_detail a set (td03_flag) = (select td03_flag
from z_temp1 b where a.user_id = b.user_id and lx = 'pz')
Plan hash value: 1855602026
-------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | | | 8720M(100)| |
| 1 | UPDATE | T_PHOTO_CUST_MEM_DETAIL | | | | |
| 2 | TABLE ACCESS FULL | T_PHOTO_CUST_MEM_DETAIL | 2094K| 51M| 5404 (3)| 00:01:05 |
| 3 | TABLE ACCESS BY INDEX ROWID | Z_TEMP1 | 24383 | 714K| 4163 (2)| 00:00:50 |
| 4 | BITMAP CONVERSION TO ROWIDS | | | | | |
| 5 | BITMAP AND | | | | | |
| 6 | BITMAP CONVERSION FROM ROWIDS| | | | | |
|* 7 | INDEX RANGE SCAN | Z_TEMP1_U | 2438K| | 3 (0)| 00:00:01 |
| 8 | BITMAP CONVERSION FROM ROWIDS| | | | | |
|* 9 | INDEX RANGE SCAN | Z_TEMP1_L | 2438K| | 4108 (2)| 00:00:50 |
-------------------------------------------------------------------------------------------------------------
优化后语句
explain plan for merge into t_photo_cust_mem_detail a
using (select td03_flag, user_id
from z_temp1 b
where user_id in (select user_id
from t_photo_cust_mem_detail where lx='pz')
) h
on (a.user_id = h.user_id)
when matched then
update set a.td03_flag = h.td03_flag;
这里需要创建两个索引
create index t_photo_cust_mem_detail_ind_lxuid on t_photo_cust_mem_detail(lx,user_id) ;
create index z_temp1_ind_uidtd03 on z_temp1(userid,td03_flag) ;
优化前SQL2个小时还没跑完
之后虽然执行时间对方没有反馈,但对方也没有再喊叫 看来满足需求了:)
|
|