优化一个sql,就是有A,B两个表,要利用b表的字段更新a表对应的字段。形如
Sql代码
update A set A.a=(select B.b from B where A.id=B.id);
原SQL
updatepntmall_rptpoint_detail a set a.scrm_rptpnt_processed=(
select distinctb.scrm_rptpnt_processed frompntmall_rptpoint_detail_tmp b where a.pntmall_rptpnt_id=b.pntmall_rptpnt_id
);
b表中只有1条数据,a表中有37万条数据,应用逻辑为更新a表中id和b表相同的
这一条SQL执行了6小时未执行完,执行计划显示为全表扫描,也就是说,虽然执行1条SQl,但执行update个过程中将37万条数据进行扫描,直到倒找相同的id进行更新
尝试过hit强制走索引,也不理想,where条件