MySQL学习笔记:普通查询、流式查询和游标查询的理解

前言

今天因为公司业务原因,使用了游标查询,只是感觉很奇怪,我以为MySQL和mongodb一样,默认就是游标查询,网上查询资料了解时还发现了流式查询
这篇,其实就是个人笔记,毕竟MySQL出来已经很久很久了,网上资料一大堆。
相比MySQL,我本人更擅长用mongodb,因为用了它三年。

普通查询

普通查询,将查询后的结果集,全部塞给客户端;

量大的话,就可能报OOM 内存溢出。

流式查询

流式查询获取数据的方法与普通查询其实是一样的( this.io.nextRow),不同之处在与普通查询时先获取所有数据,然后交给应用处理(next方法其实都是从内存数组遍历),而流式查询时逐条获取,待应用处理完再去拿下一条数据。

我个人理解:

流式查询的结果集一直存放服务端,并且客户端要一直和服务端保持连接,
等到客户端把这些结果集都消耗完了,才释放掉。

后来看到这篇文章,深入了解MySQL的流式查询机制时,算是肯定了想法,
并且还了解到,当前的数据库连接还不能公用;

如果使用了流式查询,一个MySQL数据库连接同一时间只能为一个ResultSet对象服务,并且如果该ResultSet对象没有关闭,势必会影响其他查询对数据库连接的使用!

游标查询

这种方式就和我了解的Mongodb类似,一次查询指定fetchSize的数据,直到把数据全部处理完。

但是游标查询也有缺点:

应用指定每次查询获取的条数fetchSize,MySQL服务器每次只查询指定条数的数据,因此单次查询相比与前面两种方式占用MySQL时间较短。但由于MySQL方不知道客户端什么时候将数据消费完,MySQL需要建立一个临时空间来存放每次查询出的数据,大数据量时MySQL服务器IOPS、磁盘占用都会飙升,而且需要与服务器进行更多次的网络通讯,因此最终查询效率是不如流式查询的。

mongodb用的时内存映射的方式来查询,但是量大的话,其实也有上述的问题。所以在写mongodb代码时,游标记得一定要及时关闭。

总结

一、普通查询

优点:应用代码简单,数据量较小时操作速度快。
缺点:数据量大时会出现OOM问题。
二、流式查询

优点:大数据量时不会有OOM问题。
缺点:占用数据库时间更长,导致网络拥塞的可能性较大。
三、游标查询

优点:大数据量时不会有OOM问题,相比流式查询对数据库单次占用时间较短。
缺点:相比流式查询,对服务端资源消耗更大,响应时间更长。

参考地址:
JDBC操作MySQL(3)—查询(普通、流式、游标)

深入了解MySQL的流式查询机制

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值