入职三个月的菜鸟,因为工作需要这段时间优化了一下公司老系统的计算功能,以下是我自己摸索出来的一些心得。
公司老系统ssh做的,在写计算功能的时候通过for循环发送sql一个一个查数据,导致系统折旧功能的计算极其缓慢。在优化之初我以为是因为hql转换原生sql占用较长时间,但是在我用原生sql查询一遍以后一样缓慢。因此将调转开始研究如何减少hql语句的发送,也就是减少与数据库之间的连接次数。
事实证明可以将所需要查询的数据通过for循环放入list中,然后通过select * from xxxx where id in (list)这种方法去实现,但是这边要注意一个坑 那就是 in()括号里只能放1000个数据,所以1000个以上的数据需要拆封成两组用or连接![在这里插入图片描述](https://img-blog.csdnimg.cn/20191024154538337.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzNzcwNDg1,size_16,color_FFFFFF,t_70)以上是我自己参照网上写的自己写的处理1000以上数据的拼接方法,原生sql比较容易写。在需要从数据库获取大量数据的时候,尽量通过少量的sql去获得,然后通过内存来实现数据的分类,这样能很大程度上提升性能
关于如何解决for循环中的sql查询问题心得
最新推荐文章于 2024-03-02 22:28:40 发布