怎么在MySQL中使用流式查询避免数据伯父

  介绍

本篇文章为大家展示了怎么在MySQL中使用流式查询避免数据伯父,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。


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

public  int 执行(String , sql, boolean  isStreamQuery), throws  SQLException  {   ,Connection  conn =,空;   ,PreparedStatement  stmt =,空;   ,ResultSet  rs =,空;   ,int  count =, 0;   ,try  {//才能获取数据库连接   时间=conn 才能;getConnection ();   if 才能;(isStreamQuery), {   ,,//设置流式查询参数   ,,stmt =, conn.prepareStatement (ResultSet.TYPE_FORWARD_ONLY, sql,还以为;ResultSet.CONCUR_READ_ONLY);   ,,stmt.setFetchSize (Integer.MIN_VALUE);   ,,},{else    ,,//普通查询   ,,stmt =, conn.prepareStatement (sql);   ,,}//才能执行查询获取结果   时间=rs 才能;stmt.executeQuery ();   ,,//遍历结果   而才能(rs.next ()) {   ,,System.out.println (rs.getString (1));   ,,计数+ +;   ,,}   ,}catch  (SQLException  e), {   e.printStackTrace才能();   ,}finally  {   关闭才能(支撑,rs,康涅狄格州);   ,}   ,return 计算;   }

“PS”:上面的例子中通过参数<代码> isStreamQuery> “流式查询”与<强>“普通查询”强,用于下面做测试对比。

性能测试

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

<李>

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

<李>

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

<李>

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

<李>

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

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

@Test   public  void  testCommonBigData (), throws  SQLException  {   ,String  sql =,“select  *,得到my_test";   ,testExecute (sql,,假);   }

3.1.1。查询耗时

27 w数据量用时38秒

怎么在MySQL中使用流式查询避免数据伯父

3.1.2。内存占用情况

使用将近1 g内存

怎么在MySQL中使用流式查询避免数据伯父

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

@Test   public  void  testStreamBigData (), throws  SQLException  {   ,String  sql =,“select  *,得到my_test";   ,testExecute (sql,,真的);   }

3.2.1之上。查询耗时

27 w数据量用37秒时

怎么在MySQL中使用流式查询避免数据伯父

3.2.2。内存占用情况

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

怎么在MySQL中使用流式查询避免数据伯父

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

@Test   public  void  testCommonSmallData (), throws  SQLException  {   ,String  sql =,“select  *,得到my_test  limit  100000年,10“;   ,testExecute (sql,,假);   }

3.3.1。查询耗时

10条数据量用时1秒

怎么在MySQL中使用流式查询避免数据伯父

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

@Test   public  void  testStreamSmallData (), throws  SQLException  {   ,String  sql =,“select  *,得到my_test  limit  100000年,10“;   ,testExecute (sql,,真的);   }

3.4.1。查询耗时

10条数据量用时1秒

怎么在MySQL中使用流式查询避免数据伯父

上述内容就是怎么在MySQL中使用流式查询避免数据伯父,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

怎么在MySQL中使用流式查询避免数据伯父