首页 > 数据库 >Mysql_快速返回机制的实现

Mysql_快速返回机制的实现

时间:2023-04-14 11:03:59浏览次数:123  
标签:返回 use JDBC Mysql 响应 result mysql 机制 快速

MYSQL JDBC快速查询响应的方法,快速返回机制的实现

Oracle的快速返回机制,虽然结果集很多,可是它能很快的显示第一个结果,虽然通过MYSQl的客户端可以做到,但是通过JDBC却不行。
今天用了1个多小时,终于搞定此问题,希望对广大Java朋友在处理数据库时有个参考。

来由:
    通过命令行客户端加上-q参数,可以极快的响应一个查询。
    比如结果集为几千万的select * from t1,完整结果集需要20秒,通过-q参数显示第一行只需要不到1秒。
    但通过jdbc进行查询,却不可以实现如上的效果,无论怎么调整URL参数,也不行。
  
过程:
    查看了-q参数的解释,如下:
    If you have problems due to insufficient memory for large result sets,
    use the --quick option. This forces mysql to retrieve results
    from the server a row at a time rather than retrieving the entire result set
    and buffering it in memory before displaying it. This is done by returning
    the result set using the mysql_use_result() C API function in the client/server
    library rather than mysql_store_result().
  
   可见,实现快速响应。
  
   查看 mysql_use_result() 函数,这个是C的API,如果通过C开发,可以用这个函数。
  
   那么JAVA呢?
   查找便准JDBC规范里面有关函数,没有任何收获。 setFetchSize()看上去有效,可在实际测试里,无任何性能提升。
  
    搜索 JDBC mysql_use_result, 有了意外的收获。
  
    在MYSQL的JDBC,com.mysql.jdbc.Statement 这个接口里发现了如下的内容:
    abstract public  void disableStreamingResults() throws SQLException
    Resets this statements fetch size and result set type to the values they
    had before enableStreamingResults() was called.

    abstract public  void enableStreamingResults() throws SQLException
    Workaround for containers that 'check' for sane values of Statement.setFetchSize()
    so that applications can use the Java variant of libmysql's mysql_use_result() behavior.
  
  原来MySQL提供了自己的一个快速响应的实现。调整测试代码
      stmt = (com.mysql.jdbc.Statement) con.createStatement();
      stmt.setFetchSize(1);
      stmt.enableStreamingResults(); // 打开流方式返回机制
      
结论:
    MySQL在自己的JDBC驱动里提供了特有的功能,来实现查询的快速响应,
    特别是结果集非常大或者时间较长,而用户非常想尽快看到第一条结果时特别有效。

标签:返回,use,JDBC,Mysql,响应,result,mysql,机制,快速
From: https://blog.51cto.com/u_16070335/6189670

相关文章

  • Mysql_JDBC OutOfMemoryError
    MySQL的JDBCOutOfMemoryError:Javaheapspace异常       MySql数据库通过JDBC对大表进行查询时抛出java.lang.OutOfMemoryError:Javaheapspace异常。这是因为默认情况下,MySQL的JDBC驱动会一下子把所有row都读取下来,这在一般情况下是最优的,因为可以减少Client-Server......
  • 【计算机网络-数据链路层】流量控制与可靠传输机制
    目录1停止-等待协议1.1无差错情况1.2有差错情况——数据帧出错或丢失1.3有差错情况——ACK丢失1.4有差错情况——ACK迟到1.5性能分析1.6相关例题2后退N帧协议(GBN)2.1无差错情况2.2超时重传、回退N帧2.3相关例题3选择重传协议(SR)3.1有差错情况3.2相关例题4总结......
  • 使用反射按照类结构生成MySQL表
    因为一个表对应一个java类,如果java类多了,一个一个创建表太消耗时间了,同时也想造下轮子。加深下对反射和注解的使用反射和注解把java一切皆对象的思想完全的体现了出来,同时也给java提供了强大的动态性。主要进行工作的类,可以在里面加上jdbc,就可以实现自动创建表了。importjava.......
  • mysql笔记
    1.3、数据库分类关系型数据库:(sql)MySql,Oracle,SqlServer,DB2,SQLlite通过表和表之间,行和列之间的关系进行数据的存储,学员信息表,考勤表,。。。。。非关系型数据库:(NoSQL)NotOnlyRedis,MongDB非关系型数据库,对象存储,通过对象的自身属性来决定。DBMS(数据库管理系统)数据库的......
  • MySql查询语句根据年份或月份查询
    1.按年份查询select字段名from表whereyear(字段名)='年份';2.按月份查询:select字段名from表wheremonth(字段名)='月份';3.查本年的某一天(例本年的第6天)select字段名from表wheredayofyear(字段名)='6';......
  • 使用java.util.zip对生成的字节数组输出文件流 进行打包压缩(单个、批量),并返回压缩包
    废话不多说直接上代码 packagegov.test.util;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.util.List;importjava.util.Map;importorg.apache.tools.zip.ZipEntry;importorg.apache.tools.zip.Zip......
  • percona-toolkit工具:使用pt-table-checksum检查MySQL主从库的差异
    环境介绍CentOS7.6MySQL5.7PerconaToolkit3.4.0 下载并安装PerconaToolkit从WEB端下载https://www.percona.com/downloads或者通过wget下载[root]#wgethttps://downloads.percona.com/downloads/percona-toolkit/3.5.2/binary/redhat/7/x86_64/percona-toolkit-3.......
  • 快速登录任意mysql脚本
    ######################!/bin/bash#获取输入参数ip=""port=""database=""query=""password_BASE64='WldFeU1HTXhaVFkxWWpnMk56WTFNVFUyTkRObE5qazQK'while[$#-gt0]docase$1in-h)i......
  • docker 容器操作、应用部署、mysql,redis,nginx、迁移与备份、Dockerfile
    容器操作#启动容器dockerstart容器id#停止容器dockerstop容器id#文件拷贝先创建文件mkdir:文件夹vivimtouch:文件#容器的文件copy到宿主机上(不是在容器内部操作)dockercp容器名称:容器目录需要拷贝的文件或目录dockercp......
  • MySQL日志、事务原理 -- undolog、redolog、binlog、两阶段提交
        1.undolog1.1 undolog–原子性   1.2回滚日志,记录数据被修改前的信息,属于逻辑日志什么是逻辑日志?比如我们执行一条delete语句,undolog里边记录的是相反的操作insert记录【相当于存放的是操作逻辑语句,而不是数据】逻辑日志好处比如全表更新,如果......