最近用到了利用JDBC查询Oracle数据库。可是查询效率不尽人意。研究了一下JDBC方面能够优化的地方,在这里跟大家分享一下。

  1.设置最优的预取值
        defaultRowPrefetch:预取条数默认值
         defaultBatchValue:触发查询操作的批量请求值
        这两个參数的默认值都是10。我们能够通过添加这两个參数值来降低数据库请求以提高查询效率,当然详细值大小要视详细情况而定。
  2.通过连接池获取连接
     创建连接的代价非常大,通过连接池获取连接可省去创建连接时间。
  3.选择合适的Statement接口(共同拥有三种)
  • Statement:仅仅支持静态sql
  • PreparedStatement:支持动态输入參数的sql, 由于其预编译的sql具有可重用性,可极大地避免Oracle对sql的(应解析和软解析)解析时间,提高查询速度
  • CallableStatement:专门针对存储过程,使用它能享受到全部存储过程带来的优势,但也包含存储过程带来的劣势如Java程序可移植性查,依赖数据库等
  4.设置检索时的批量值
      Statement.getFetchSize();  
获取一次检索的批量值
      Statement.setFetchSize(30); 设置批量值
      传统情况下,设置FetchSize值对检索大数据表时性能的提升是非常明显的。原因是jdbc驱动默认每次仅仅检索10条记录(传到client的应该是一个游标),假设我们要检索100条数据,那么就须要client和server端进行10次网络往返才干所有传输完成。每次网络间传输都会耗掉一些时间,比方採用TCP/IP协议的话。要建立连接握手及额外的协议头尾开销等,这样势必会影响client的响应。

至于JDBC为何要设计这么小的数。有人说是为了避免jvm
out of memory 问题。

详细性能能提高多少,请參考:http://blog.lishman.com/2008/03/jdbc-fetch-size.html
  5.设置ResultSet的批量值
      ResultSet.getFetchSize(); 获取默认批量值
      ResultSet.setFetchSize(50); 设置批量值     
      处理大数据时可显著提高处理速度
  6.设置ResultSet合适的处理方向
       ResultSet.getFetchDirection(); 获取默认值

ResultSet.setFetchDirection(FETCH_REVERSE);设置合适的值

  7.从ResultSet获取数据时有两种方式, rs.getObject(int column_index) 和 rs.getObject(String column_label)
  • rs.getObject(int column_index):这样的方式直接依据索引从rs对象中取出 。最快
  • rs.getObject(String column_label) :
    这样的方式须要先通过label获取到索引。然后再依据索引取数据,比直接利用索引多走了一步

8.合理的使用ResultSet的getXXX()方法

ResultSet提供了非常多各式各样的getxxx() 方法。比方你知道第一个值是String类型的话。那么就写成getString(1),假设你不指示明白的话,它会则须要把这个值再转换成合适的Java类型,转换的代价是比較大的,假设检索出来的数据有一百万条的话,那么这个字段值就会被转换一百万次。

 9.优化查询SQL

比方避免使用select * from table where condition...,由于这么做会把全部的数据项目查询出来。比方我们仅仅须要Salary的话。我们就写成select salary from employee where name=RR,避免不必要数据的检索。

 10.Cache仅仅读(read-only)和主读(read-mostly)表的数据

仅仅读表的数据不会发生变化。主读表发生变化较少,假设每次请求都读一遍表的话显然是没有必要,因此能够把这些数据缓存起来。当然。对于主读表要设定一定的更新时间。

11.迭代分批次获取数据替代一次大批量获取数据

某些情况下,应用程序可能会通过JDBC一次请求大量数据,而应用程序可能会一次把全部数据返回给client,这样会用掉非常多时间,能够採取例如以下方式解决:

  • 在Server端缓存数据,分批次发给Client端。比方Server端查询出1000条数据,能够分10批次每次传送100条给Client端
  • 不在Server端缓存数据。而通过存储过程迭代的返回小批量数据

JDBC性能优化方案的更多相关文章

  1. mysql 性能优化方案

    网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

  2. mysql 性能优化方案1

    网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

  3. (转)Web性能优化方案

    第一章 打开网站慢现状分析 在公司访问部署在IDC机房的VIP网站时会感觉很慢.是什么原因造成的?为了缩短页面的响应时间,改进我们的用户体验,我们需要知道用户的时间花在等待什么东西上. 可以跟踪一下我 ...

  4. mysql 性能优化方案 (转)

    网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

  5. Redmine性能优化方案

    近来公司redmine服务器表现很糟糕,在16核,64GRAM的机器上,压测结果竟然只有每秒5~7个请求,部分页面一个都出不来. 以下是我对Redmine性能优化方案: redmine服务器性能问题排 ...

  6. Web性能优化方案

    第一章 打开网站慢现状分析 在公司访问部署在IDC机房的VIP网站时会感觉很慢.是什么原因造成的?为了缩短页面的响应时间,改进我们的用户体验,我们需要知道用户的时间花在等待什么东西上. 可以跟踪一下我 ...

  7. 老李分享:MySql的insert语句的性能优化方案

    老李分享:MySql的insert语句的性能优化方案   性能优化一直是测试人员比较感兴趣的内容,poptest在培训学员的时候也加大了性能测试调优的方面的内容,而性能优化需要经验的积累,经验的积累依 ...

  8. DedeCMS数据负载性能优化方案简单几招让你提速N倍

    前文介绍了DedeCMS栏目列表页实现完美分页的方法,避免了大部分重复栏目标题对搜索引擎的影响,对SEO更有利.今天,分享一下DedeCMS数据负载性能优化的方法. 接触织梦也有三年多时间了,对它可谓 ...

  9. GNU Linux高并发性能优化方案

    /*********************************************************** * Author : Samson * Date : 07/14/2015 * ...

随机推荐

  1. WCF技术剖析 Two

    WCF终结点和寻址之--AddressHead信息匹配代码 Contracts契约 using System; using System.Collections.Generic; using Syst ...

  2. v4l2读取摄像头程序流程解析【转】

    转自:https://my.oschina.net/u/1024767/blog/210801 v4l2 操作实际上就是 open() 设备, close() 设备,以及中间过程的 ioctl() 操 ...

  3. Sax解析xml及pull解析xml

    sax解析参考:http://www.iteye.com/topic/763895: 说明:测试时报空指针异常,未能读取到数据,关注Sax解析的过程及API即可: pull解析参考:http://ww ...

  4. git的使用03

    之前我们写的都是将代码存在本地,我们还可以将代码github官网上,放在github的服务器上去托管

  5. Mongodb的学习整理(下)

    聚合 aggregate 聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() 语法 db.集合名称.aggregate([{管道:{表达式}}]) 管道 管道在Unix和 ...

  6. 【转载】SQL server connection KeepAlive

    1.什么是SQL server TCP连接的keep Alive? 简单说,keep alive 是SQL server在建立每一个TCP 连接的时候,指定了TCP 协议的keepaliveinter ...

  7. (2)oracle服务、建库

     一.oracle的服务 oracle 11g安装后服务一般是7到8个 1.Oracle ORCL VSS Writer Service Oracle卷映射拷贝写入服务(非必须启动) 2.Oracle ...

  8. IE浏览器Cookie信息提取工具Galleta

    IE浏览器Cookie信息提取工具Galleta   浏览器Cookie中保存着用户访问网站的各项敏感信息,如用户登录凭证.提取这些信息后,就可以以该用户的身份访问对应的网站.为了方便信息获取,Kal ...

  9. android利用adb修改手机的分辨率和dpi

    在android开发过程中,适配更多的适配是必不可少的一步,而每次测试适配时,要么购买设配,要么模拟器,买设配太花钱,模拟器太占内存,不过幸好还可以通过修改手机的size(分辨率)和density来进 ...

  10. [POI2014]Around the world

    题目大意: 一个环上有$n(n\le10^6)$个点,每个点之间的距离为$l_i(l_i\le10^9)$.有$m(m\le100)$架飞机,每架飞机单次最大航行距离为$d_i$.飞机只能在点上起飞. ...