oracle

来源:互联网 发布:海信网络智能电视 编辑:程序博客网 时间:2024/05/09 08:06

 

1,  立项优化的第4个sql优化方案通过技术评审。立项优化的其它sql详见附件《立项优化的sql.xlsx》。

 

=》form_field能否去掉的问题徐其华在跟进,如果能去掉的话将进行再次优化。

 

=》立项优化的sql有6个,其中有5个优化方案通过技术评审,还有一个需要和业务沟通,徐其华在跟进。

 

2,  今天晚上在生产库上对OC_CUST_SEND. SEND_RESULT字段加上索引来脚本下面sql每天频繁预警的问题:

 

预警sqlselect count(cs.cust_send_id) asoc_cust_send_count from oc_cust_send cs where cs.send_result=1

 

 

索引脚本:createindex PA18DATA.IX_OC_CUST_SEND_SEND_RESULTon PA18DATA.OC_CUST_SEND (SEND_RESULT) ;

 


我们项目中经常有要求表中一个字段或一组字段必须唯一情况,我们现在通常是写两个sql,一个sql是判断是否存在相应值,然后判断是否insert。

 

但当并发量大的时候就会有问题,在数据级别会频繁报错。ORA-00001:unique constraint (PA18CMSDATA.UK_KFJ_VOL_VOTE_INFO_YZT_TIME) violated 错误。

 

原因是 第1个sql运行成功之后,第2个sql运行成功之前存在一定的时间差。期间有可能有insert相同的值。

 

如果能缩短这两个sql的时间差,就能提高并发,降低报错。

 

现在把这两个sql和成一个sql写,可以缩短时间差,即可以提高并发。

 

以后大家参考以下写法来实现这类功能。

 

INSERTALLINTOkfj_volunteer_vote_info

  (id_volunteer_vote_info,

   yzt_client_code,

   yzt_partyno,

   yzt_mobile,

   user_no,

   created_by,

   date_created,

   updated_by,

   date_updated,

   vote_time)

VALUES

  (seq_kfj_volunteer_vote_info.nextval,

   #yztclientcode#,

   #yztpartno#,

   #usermobile#,

   #userno#,

   'sysuser',

   SYSDATE,

   'sysuser',

   SYSDATE,

   to_char(SYSDATE,'yyyyMMdd'))

  SELECT1

  FROM   dual

  WHERE NOTEXISTS

   (SELECT1

          FROM  kfj_volunteer_vote_info v

          WHERE v.yzt_client_code =''

          AND   v.vote_time = to_char(SYSDATE,'yyyyMMdd'));

 

 

下面解释一下这个sql

 

  SELECT1

  FROM   dual

  WHERE NOTEXISTS

   (SELECT1

          FROM  kfj_volunteer_vote_info v

          WHERE v.yzt_client_code =''

          AND   v.vote_time = to_char(SYSDATE,'yyyyMMdd'));

 

--》这类sql是判断是否要insert,  如果条件为true,则insert,否则不insert,     就是我们要判断是否要insert的条件了。

 

INSERTALLINTOkfj_volunteer_vote_info

  (id_volunteer_vote_info,

   yzt_client_code,

   yzt_partyno,

   yzt_mobile,

   user_no,

   created_by,

   date_created,

   updated_by,

   date_updated,

   vote_time)

VALUES

  (seq_kfj_volunteer_vote_info.nextval,

   #yztclientcode#,

   #yztpartno#,

   #usermobile#,

   #userno#,

   'sysuser',

   SYSDATE,

   'sysuser',

   SYSDATE,

   to_char(SYSDATE,'yyyyMMdd'))

 

--》  这个就是我们要insert的具体操作了

 

 

------------------------------------

 

另外

 

Insert all  可以实现按照不同条件 insert不同表 。

 

Insert first 可以实现按照不同条件 insert第1个表。

 

项目中,大家可以考虑这种写法,来提高并发,谢谢!


0 0