update cbs_contractlife set back_date =to_date('2014-11-17','yyyy-mm-dd') where policy_code ='6663131080120140003518' and status ='1';
update cbs_receiptinfo set back_date = to_date('2015-10-13','yyyy-mm-dd') where policy_id = (select policy_id from cbs_contractlife where policy_code ='9251645A75515000808' ) and rec_type ='0';
就这两个sql,只不过量比较大,三万条,好吧也不是很大,但是oracle要跑40分钟,然后两道就不乐意了,这要怎么改啊,要创建新的表吗
加上索引,语句优化
policy_code和policy_id上建索引。另外如果一次update的数据量比较多,不要一次性提交,分批次更新提交。
主键是SEQ_ID
主键仍为SEQ_ID
cbs_contractlife.policy_code
cbs_contractlife.status
cbs_receiptinfo.policy_id
cbs_receiptinfo.rec_type
四个字段建索引
如果存在索引,可以做下索引重建
update cbs_contractlife set back_date =to_date('2014-11-17','yyyy-mm-dd') where policy_code ='6663131080120140003518' and status ='1';
//这条语句速度应该不慢,如果慢的话,在cbs_contractlife的policy_code上加索引
update cbs_receiptinfo set back_date = to_date('2015-10-13','yyyy-mm-dd') where policy_id = (select policy_id from cbs_contractlife where policy_code ='9251645A75515000808' ) and rec_type ='0';
//在表cbs_contractlife增加policy_code索引