mysql

mybatis大数据查询优化:fetchSize

2020-08-28  本文已影响0人  帅气滴糟老头

这两天做到一个需求,需要一次性将一张数据表里的所有资源数据中的位置信息录入到redis中,表中的数据有几百万起步,采用的是java定时任务,循环每次查出一万条数据存入redis,测试时发现插入效率非常慢,经过排查发现是通过mybatis查询数据的耗时超过了总耗时的99%,我这台机器上是每查询一万条数据返回耗时87s左右。
解决方法:
在mapper.xml中的<select>中加入fetchSize参数,设置的大一些,如下:


设置完后一次查询一万条返回由原来的87秒变成了毫秒级别

我也是第一次用这个参数,这效果,感觉非常神奇!

简单参数解析:
通过JDBC取数据时,默认是10条数据取一次,即fetch size为10(根据oracle的文档,默认的fetchSize是10),如果增大这个数字可以减少客户端与oracle的往返,减少响应时间,网上有建议这个数字不要超过100,要不然对中间件内存消耗大。
虽然说超过100不好,但是我设置了10000,结果看我的破电脑还是扛得住的,但是本着专研精神,我将fatch size设置为1000,看看效果会不会打折扣,结果用时如下:


确实容量设小了后速度有所折扣。

总结:
在使用mybatis一次查询大量数据时确实可以通过怎大fatchSize的值来大大提高查询效率,使用也非常简单,具体fatchSize设为多少要根据自己具体的业务需要和机器的配置来综合判定。

上一篇下一篇

猜你喜欢

热点阅读