记一次后端接口开发及性能优化

任务说明:这次的任务是在原有的后台接口项目基础上新增一个接口。该接口设计四个数据表,假设为table1,table2,table3,table4。首先从table1中按照 funcId 字段查找相应的 caseId 字段,为一对多的关系;然后根据查找出来的 caseId 在table2中查找相应的caseName,一般是一对一的关系,但是为了防止出现一对多,也会假设查出的是多条记录;第三步是根据查出的caseName分别在table3和table4中查找是否存在对应的记录,并返回相应的标识。

开发思路:这次查出的最终结果是从 table3 和 table4 中,分别对应的是业务工单生产事件记录,数据在同一个接口中返回。现有的代码里这两项是分开的,这次只需要在其中一个里面添加即可,这次选择在生产事件中添加。在四个表对应的 mapper.xml 里面分别编写对应的 sql 查询数据,根据 funcId 查找 caseId,在原有的 mapper 里面已经存在根据 funcId 查找所有字段的操作,由于table1中总共只有3个字段,因此就直接使用这个 sql 操作而不重新编写了。第二个表对应的查询数据,由于现有的根据caseId查找数据字段有30多个,而我仅需要其中的一个,即 caseName,因此就自己重新写了一个只查找有用的一个,以免查询和返回数据量太大,造成效率降低。此时我只想到了根据单个caseId查找caseName,即逐条查询。最后的查询其实比较简单,就是在table3和table4中分别查询,就编写了对应的sql查询语句,也是逐条查询。而针对实际问题中可能存在多条查询条件,如前一步查出来多个caseName,而我需要在后续依次查询这几个caseName的记录,这种情况,我首先想到的是在代码处理时,通过for循环实现依次查询。

性能优化:按照以上思路,多番调试,确实也将相关记录查出来了。但是却发现接口返回数据的时间达到了1~2s,这个效率有点堪忧。我后续查找了资料:https://blog.csdn.net/blogzlh/article/details/51970228  发现正如文中所说:“由于在for循环中,所以的操作时间复杂度都变为了O(n)”,接口变慢就是因为频繁使用sql语句访问数据库。因此,我修正了原来单条查询的思路,而是尽量在一次数据库操作中查询完所需的数据记录,也就是批量查询。将前一步查出的多个条件放置于一个list或set中,在一此数据库操作中批量查询出来。这样在代码部分就不用使用for循环。查询一次即可完成。果不其然,改完了这点之后,发现接口响应速度从秒级下降到了几十毫秒。但是第一次查询还是需要几百毫秒。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值