避免在for循环中使用sql语句


这是个基本常识额,在这里再赘述一下。

例如一个大sql查出100条结果,现在每条记录要关联显示一条其他数据。该怎样做?

for循环中使用sql语句

最简单的一种方式就是for循环中使用sql语句。根据关联字段查出对应的数据。

优点:
实现简单快速,在2个表都有基本Mapper的情况下,不用新增任何基础类,直接可以拼凑逻辑。

缺点:
整个接口速度慢,例如list有100条结果,每条都遍历查库,需要查100次库。
而建立session访问数据库是较耗时的操作,最简单的一个session也要20ms左右。
光和数据库交互就要2秒,更何况还有其他逻辑。

大量查询拉低数据库性能, 数据库的连接数是有限的,因为有限,所以珍贵。
即使配置了连接池,有效的提高了和数据库交互的效率。 仍应避免大量频繁查询。
for循环中使用sql语句,有个明显的现象是第一次查询速度很快,越查询越慢。
这是个很反常的现象,因为oracle有缓存的机制,按道理说该第一次查询慢,越查询越快。
那么为什么会出现这种情况呢?
是因为每次这种for循环查询,会大量请求数据库,造成通道拥堵。所以越查越慢。

一个大sql实现功能

上面说了,for循环sql语句效率太低。
那么该怎么办呢?
一个大sql实现功能。

优点:
如果功能确定,且不轻易修改。这种方式是很好的,因为高度定制,可以尽可能的优化sql语句。往往可以写出性能很好的sql语句。

缺点:
如果该sql频繁需要扩展,高度定制的方式就不太适合。每次扩展,都要进行调整。不但工作量大,而且容易出错。一不小心,辛辛苦苦优化的sql就变成木柴了。

2个for循环用java遍历

如果语句好调整,一条sql出结果最好。
实在不行的话,也可以用foreach标签,将关联表的数据查为一个list。
哪怕在java中有2个for循环呢,效率也比直接for循环sql查库好。
因为查出2个list,用2次sqlSession即可,是绝对比for循环调用n次好。

用sql搞崩一个项目

不用什么大sql,直接来个10000次的for循环。 每个循环里面一个sql就行,数据库基本就崩了。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值