`

Mysql_快速返回机制的实现

 
阅读更多

via: http://www.2cto.com/database/201110/107647.html

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驱动里提供了特有的功能,来实现查询的快速响应,
    特别是结果集非常大或者时间较长,而用户非常想尽快看到第一条结果时特别有效。

分享到:
评论

相关推荐

    MySql_C 接口集合

    - **功能**:返回上一次`mysql_fetch_field()`操作的字段游标位置。 - **使用场景**:在循环处理字段时保持状态跟踪。 #### 22. `mysql_free_result()` - **功能**:释放结果集占用的内存。 - **使用场景**:优化...

    mysql.rar_MYSQL_mysql c++_mysql sdk

    总的来说,"mysql.rar"压缩包中的资源对学习和使用MySQL C++ SDK非常有帮助,无论是初学者还是经验丰富的开发者,都可以通过这个SDK快速掌握在C++中操作MySQL数据库的技能。记得在实际项目中,根据需求选择合适的...

    MySQL_data.dll

    5. **多种存储引擎**:MySQL支持多种存储引擎,如InnoDB(支持事务处理)、MyISAM(快速读取)等,满足不同的应用场景需求。 6. **安全性**:MySQL提供用户权限管理和访问控制,确保只有授权用户才能访问数据。 ...

    24小时学会使用PHP MySQL and Apache.rar_MYSQL_apache_apache mysql_php m

    《24小时学会使用PHP MySQL and Apache》是一本旨在帮助初学者快速掌握Web开发核心技术的教程。这本书的核心是教你如何整合三个关键组件:PHP(一种流行的服务器端脚本语言)、MySQL(一个开源的关系型数据库管理...

    JSP_JTBC_CMS(MYSQL).tar.gz_登录 mysql_网页 mysql 登录

    标题中的“JSP_JTBC_CMS(MYSQL).tar.gz”指的是一个使用JSP(Java Server Pages)技术构建的内容管理系统(CMS),并且依赖MySQL作为其后台数据库。这个系统被压缩成一个.tar.gz文件,这是一种在Linux和Unix系统中...

    ssh_bbs_mysql_论坛

    标题中的"ssh_bbs_mysql_论坛"表明这是一个关于使用SSH(Spring、Struts、Hibernate)技术框架构建基于MySQL数据库的论坛应用的项目。SSH是Java Web开发中常用的三大开源框架,用于实现MVC(Model-View-Controller)...

    mmall_管理_权限管理mysql_权限_

    【标题】"mmall_管理_权限管理mysql_权限_" 指的是一款基于JWT、SpringBoot、Mybatis和MySQL的权限管理系统。这样的系统主要用于控制不同用户或角色在应用程序中的访问权限,确保数据安全和操作合规性。 【描述】...

    te.rar_Ajax php mysql_PHP设备管理_设备_设备管理

    它指出该系统使用Ajax技术来实现与服务器的实时通信,数据库选用了MySQL,这通常是为了高效地存储和检索设备数据。此外,描述还提到了这是一个简单的框架,这意味着它可能是一个基础架构,适合初学者学习或者快速...

    mysql_+ssi框架

    通过这样的框架,开发者可以快速构建一个动态、响应式的网站,同时利用MySQL的强大数据处理能力和SSI的轻量级动态内容生成机制。在实际应用中,可能还需要考虑错误处理、数据验证、用户体验优化等方面的问题。

    mysql c++封装类库 方便mysql编程

    4. **错误处理**:封装类应该包含适当的错误处理机制,当MySQL操作失败时,能提供有用的错误信息。这可能包括捕获并打印`mysql_error()`返回的错误信息。 5. **事务管理**:如果支持,类库可能包含开始、提交和回滚...

    SSM + MySQL 汽车租赁_在线_SSM汽车_MYSQL_汽车租赁系统呢_

    在汽车租赁系统中,MySQL存储了汽车的基本信息(如型号、颜色、价格等)、用户信息以及租赁记录等数据,通过精心设计的数据表结构和索引优化,确保了数据的快速查询和更新。 系统的主要功能可能包括: 1. 用户模块...

    高可用MySQL_构建健壮的数据中心

    在实际操作中,为了实现MySQL的高可用性,常用的解决方案包括复制(Replication)、主从复制(Master-Slave Replication)、半同步复制(Semi-Synchronous Replication)、集群(Cluster)等技术。复制可以将数据从...

    mysql_Query优化

    MySQL 查询优化是一个多方面的过程,涉及到对数据库架构、查询语句本身以及 MySQL 内部机制的深入理解。通过合理的设计、利用索引和优化查询语句,可以显著提高查询性能,从而提升整个应用程序的响应速度和用户体验...

    Tuxedo&Jolt&MySQL 开发

    3. **可靠性**: 具备故障恢复机制,确保在出现故障时能够快速恢复服务。 4. **安全性**: 提供了丰富的安全特性,保障数据的安全性和完整性。 5. **跨平台**: 可以运行在不同的操作系统之上,提供统一的应用程序接口...

    mysql中文API

    良好的错误处理机制能帮助开发者快速定位并解决问题,提高代码的健壮性。 5. **事务处理**: 对于需要原子性和一致性的操作,MySQL支持事务管理。`START TRANSACTION`, `COMMIT`和`ROLLBACK`语句可以用来确保一系列...

    PHP连接数据库模板

    为了方便快速地实现PHP程序与MySQL数据库之间的连接与数据交互,通常会编写一段模板代码,方便在不同的项目或场景中复用。本篇将基于给定的“PHP连接数据库模板”来详细解析其中涉及的关键知识点。 #### 二、基本...

    二、Mysql_Html_Css_Jdbc-(进阶提升、新手必看)

    【数据库的优势】数据库提供了持久化存储、数据结构化、高效的数据操作、快速检索(通过索引)、高数据共享性、低冗余度、安全机制(身份验证和授权)以及容灾备份能力,适合处理大规模、高并发的数据操作。...

    mysqlredis_pool for windows

    在给定的“mysqlredis_pool for windows”项目中,我们关注的是如何在Windows环境下使用C或C++语言实现对MySQL和Redis数据库的客户端连接池以及线程池。这个项目的核心目标是提高数据库操作的效率和并发性能,减少...

Global site tag (gtag.js) - Google Analytics