一直很纠结,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();
        
        我期待的效果出现了。第一行数据被快速的现实出来,时间不到1秒中。
        
结论:
    MySQL在自己的JDBC驱动里提供了特有的功能,来实现查询的快速响应,

特别是结果集非常大或者时间较长,而用户非常想尽快看到第一条结果时特别有效。

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

  1. mysql常用快速查询修改操作

    mysql常用快速查询修改操作 一.查找并修改非innodb引擎为innodb引擎 # 通用操作 mysql> select concat('alter table ',table_schema ...

  2. MySQL命令行查询乱码解决方法:

    MySQL命令行查询乱码解决方法: 参考文章: (1)MySQL命令行查询乱码解决方法: (2)https://www.cnblogs.com/aksir/p/7070493.html 备忘一下.

  3. mysql jdbc 分页查询_JDBC与MySQL实现分页查询技术

    由于通过ResultSet的光标实现数据分页存在占用大量资源等性能方便的缺陷,所以,在实际开发中,通过采用数据库的分页机制来实现分页查询功能更为上上之策. 下面我就通过MySQL数据库提供的分页机制来 ...

  4. Mysql中分页查询两个方法比较

    mysql中分页查询有两种方式, 一种是使用COUNT(*)的方式,具体代码如下 1 2 3 SELECT COUNT(*) FROM foo WHERE b = 1; SELECT a FROM f ...

  5. MYSQL的随机查询的实现方法

    SELECT * FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(i ...

  6. MySQL中快速复制数据表方法汇总

    本文将着重介绍两个MySQL命令的组合,它将以原有数据表为基础,创建相同结构和数据的新数据表. 这可以帮助你在开发过程中快速的复制表格作为测试数据,而不必冒险直接操作正在运行 的数据表. 示例如下: ...

  7. 搜狗权重查询 批量快速查询搜狗权重方法

    最近入职了一家SEO公司,接手管理了400多个网站,需要每天查询搜狗权重情况,但是手动一个一个非常的耗时间,但是有什么方法可以快速批量查询搜狗权重呢?     最近发现使用iis7站长之家的批量查询搜 ...

  8. Mysql数据快速备份和恢复方法总结

    说到数据库备份很多人可能会立刻想到用mysql连接工具Navicat可以实现轻松备份,确实这是一种最基本的备份和恢复数据的方法但是很多场景下比如表的数据量比较大,用连接工具不管是导出还是导入都会耗时比 ...

  9. Mysql剖析单条查询三种方法

    三种方法: SHOW PROFILE SHOW STATUE 检查慢查询日志 SHOW PROFILE能帮助我们定位到哪些活动花费了最多的时间,但并不会告诉我们为什么会这样. SHOW STATUE是 ...

最新文章

  1. 【Struts2框架】Struts2总结
  2. 中原证券携手神策数据,筑就线上线下融合的数字化运营体系
  3. mysql replace into 使用过程中报错
  4. linux网络存储服务器选题意义,基于嵌入式Linux的网络存储的实现和研究
  5. sap crm button_正值SAP中国成立25周年之际,江苏金来奇智能科技SAPB1项目正式启动...
  6. 记一次ubuntu误操作导致无法用sudo
  7. linux php7 yum 卸载,Linux_在Centos中yum安装和卸载软件的使用方法,安装一个软件时 yum -y install h - phpStudy...
  8. wxWidgets:入门
  9. 神经网络用作分类器(附代码matlab)
  10. vscode 5500 but failed to open in Browser Preview. Got Browser Preview extension installed?
  11. 开源编辑器Makedown的安装
  12. 计算机病毒论坛,【本人整合】电脑病毒样本包大合集
  13. mysql数据库的设计工具_MySQL Workbench,专为MySQL设计的数据库建模工具
  14. 解决PHPstudy(PHP工具箱)中host文件无法保存的问题
  15. Financial knowledge
  16. Cent os 7 使用vnc远程访问
  17. linkedin 分享_如何将您的LinkedIn个人资料添加到WordPress
  18. 计算机毕设-学籍管理系统
  19. 网管员必知:常用电脑密码破解(转)
  20. CocoaPods制作第三方库,管理自己的私有库以及发布官方库(模块化与组件化)

热门文章

  1. return的返回用法
  2. java面向对象基础练习1(坐标点移动)
  3. ML之FE:特征工程处理中常用的数据变换(log取对数变换等)之详细攻略
  4. 详细解析python正则表达式re模块
  5. 信息学奥赛一本通习题答案(五)
  6. Tempest之Testr使用
  7. 备受全球瞩目的「USDT集体索赔案」来龙去脉|全文译本
  8. 《AR与VR开发实战》——第1章AR技术简介
  9. 接入google 登录 google oauth2
  10. 相机响应曲线、ISO详解