美文网首页mysql
mybatis大数据查询优化:fetchSize

mybatis大数据查询优化:fetchSize

作者: 帅气滴糟老头 | 来源:发表于2020-08-28 21:20 被阅读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设为多少要根据自己具体的业务需要和机器的配置来综合判定。

    相关文章

      网友评论

        本文标题:mybatis大数据查询优化:fetchSize

        本文链接:https://www.haomeiwen.com/subject/fgdrsktx.html