千家信息网

如何使用流式查询并对比普通查询进行MySQL性能测试

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要讲解了"如何使用流式查询并对比普通查询进行MySQL性能测试",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用流式查询并对比普通查询进
千家信息网最后更新 2025年12月01日如何使用流式查询并对比普通查询进行MySQL性能测试

这篇文章主要讲解了"如何使用流式查询并对比普通查询进行MySQL性能测试",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用流式查询并对比普通查询进行MySQL性能测试"吧!

一、前言

程序访问 MySQL 数据库时,当查询出来的数据量特别大时,数据库驱动把加载到的数据全部加载到内存里,就有可能会导致内存溢出(OOM)。

其实在 MySQL 数据库中提供了流式查询,允许把符合条件的数据分批一部分一部分地加载到内存中,可以有效避免OOM

二、JDBC实现流式查询

使用JDBC的 PreparedStatement/StatementsetFetchSize 方法设置为 Integer.MIN_VALUE 或者使用方法 Statement.enableStreamingResults() 可以实现流式查询,在执行 ResultSet.next() 方法时,会通过数据库连接一条一条的返回,这样也不会大量占用客户端的内存。

public int execute(String sql, boolean isStreamQuery) throws SQLException {    Connection conn = null;    PreparedStatement stmt = null;    ResultSet rs = null;    int count = 0;    try {        //获取数据库连接        conn = getConnection();        if (isStreamQuery) {            //设置流式查询参数            stmt = conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);            stmt.setFetchSize(Integer.MIN_VALUE);        } else {            //普通查询            stmt = conn.prepareStatement(sql);        }        //执行查询获取结果        rs = stmt.executeQuery();        //遍历结果        while(rs.next()){            System.out.println(rs.getString(1));            count++;        }    } catch (SQLException e) {        e.printStackTrace();    } finally {        close(stmt, rs, conn);    }    return count;}

PS:上面的例子中通过参数 isStreamQuery 来切换流式查询普通查询,用于下面做测试对比。

三、性能测试

创建了一张测试表 my_test 进行测试,总数据量为 27w 条,分别使用以下4个测试用例进行测试:

  1. 大数据量普通查询(27w条)

  2. 大数据量流式查询(27w条)

  3. 小数据量普通查询(10条)

  4. 小数据量流式查询(10条)

3.1. 测试大数据量普通查询

@Testpublic void testCommonBigData() throws SQLException {    String sql = "select * from my_test";    testExecute(sql, false);}
3.1.1. 查询耗时

27w 数据量用时 38 秒

3.1.2. 内存占用情况

使用将近 1G 内存

3.2. 测试大数据量流式查询

@Testpublic void testStreamBigData() throws SQLException {    String sql = "select * from my_test";    testExecute(sql, true);}
3.2.1. 查询耗时

27w 数据量用时 37 秒

3.2.2. 内存占用情况

由于是分批获取,所以内存在30-270m波动

3.3. 测试小数据量普通查询

@Testpublic void testCommonSmallData() throws SQLException {    String sql = "select * from my_test limit 100000, 10";    testExecute(sql, false);}
3.3.1. 查询耗时

10 条数据量用时 1 秒

3.4. 测试小数据量流式查询

@Testpublic void testStreamSmallData() throws SQLException {    String sql = "select * from my_test limit 100000, 10";    testExecute(sql, true);}
3.4.1. 查询耗时

10 条数据量用时 1 秒

感谢各位的阅读,以上就是"如何使用流式查询并对比普通查询进行MySQL性能测试"的内容了,经过本文的学习后,相信大家对如何使用流式查询并对比普通查询进行MySQL性能测试这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

查询 数据 测试 普通 内存 性能 数据库 情况 方法 学习 内容 参数 结果 有效 使用方法 例子 前言 客户 就是 思路 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 ftp服务器如何修改 进口网络技术转让产品 lorasia是什么服务器 网络安全打油诗大全集 20人设计公司适合做什么服务器 米米mxmimi的服务器地址 网络安全法100问 云服务器安全管理办法 2019年软件开发薪酬行情 海南新概念互联网科技有限公司 网络安全 干部培训 数据库查询其他软件文件版本 关系数据库的三类完整性含义 数据库文件备份的扩展名 常用服务器的固定端口是什么 灵信软件开发有限公司 数据库 暗黑2 网络技术工程师华为面试题 计算机网络安全认证视频 软件开发服务审计标准 斗罗大陆服务器怎么找 软件开发交付方式有哪些 火影手游火之国服务器是多少 计算机软件开发专业涉及范围 数据库切换面板6 周口城尚互联网科技有限公司 数据库技术试题文库 成都网络安全产业什么时候推基金 数据库从入门到进阶解压密码 免费 数据库 空间
0