某银行校园卡缴费性能测试和SQL优化

     在某银行做校园卡缴费的测试过程中,发现成功缴费时间很长,大约需要75秒左右,原因分析:

在做校园卡缴费的时候,首先是从数据库中查询到需要缴费的费项,然后再对该费项进行缴费,缴费成功后修改相应的状态,交易完成后,查看日志,发现下面的查询语句执行时间很长,在数据库中执行时间大约74.516秒,可见几乎所有的时间都花在查询上。

select b.stu_id, b.term_id, b.cost_code
  from bib_booking_student_info a, bib_booking_fee_info b
 where a.busi_id = b.busi_id
   and a.corp_id = b.corp_id
   and a.term_id = b.term_id
   and a.stu_id = b.stu_id
   and b.stu_stat = '0'
   and a.busi_id = '100104'
   and a.corp_id = 'E000000059'
   and a.term_id = '0101'
   and a.stu_id = '59000030';

解决办法,优化此SQL语句(说时候,这个SQL写得真不好,只是实现了功能,完全没有考虑性能,尤其当数据库大的时候),下面是优化后的SQL语句:

select b.stu_id, b.term_id, b.cost_code
  from bib_booking_fee_info b
 where b.stu_stat = '0'
   and exists( select 1 from bib_booking_student_info a where
   a.corp_id = b.corp_id
   and a.term_id = b.term_id
   and a.stu_id = b.stu_id
   and a.busi_id = b.busi_id
   and a.busi_id = '100104'
   and a.corp_id = 'E000000059'
   and a.term_id = '0101'
   and a.stu_id = '59000030'
    )

此语句执行时间只有0.219秒,快了很多很多。

总结:在类似于这种交易,先查询再缴费(改变字段状态)的交易,执行查询时间的多少直接影响到此交易的性能。假如只是做插入,不做查询的交易,这种交易一般都很快,有查询,然后再缴费(改变字段状态)的交易,如果响应时间很慢,那需要在查询SQL语句上下功夫。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值