JAVA 数据库编程中的性能优化

1、 禁止自动提交:
在默认情况下,程序执行的任何sql 语句都是自动提交的
向一个表中插入2000条记录,
自动提交所用的时间  11666毫秒
禁止自动提交(显示提交) 3450毫秒

2、 批处理:
多用批处理,减少操作数据库次数。
(1)、禁止自动提交
setAutoCommit(false);
(2)、准备一个语句对象
PreparedStatement myPrepStatement = myConnection.prepareStatement(“insert into test_tab(value) values(?)”;
(3)、将语句添加进批中
addBatch();
(4)、执行这批语句
executeBatch();
(5)、提交执行的语句
myConnection.commit();

Oracle新的改进后的批处理:(JDBC2.0以上支持)
   只能对OraclePreparedStatement对象进行处理,其中的sql语句在5-30个是最优化的)
   改进的地方是,可以预设批大小,SQL 语句就会自动添加进批中。
(1)、禁止提交
(2)、设置批值
myoracleConnection.setDefaultExecuteBatch(10);
(3)、对SQL语句进行批处理
for (int count = 0;count<20;count++){
myOraclePrepStatement.setInt(1,count);
int rowsInserted = myOraclePrepStatement.executeUpdate();
}
注:还可以强制执行int rowsInserted = myOraclePrepStatement.sendBatch();

3、 行预获取
默认情况下,结果集获取的行数是10,对大多数程序都是合适的,但是,如果要获取的行非常多,那么可以增加获取尺寸以便进一步提高程序性能。
通常采用Oracle行预获取,而不用标用行预获取

标准行预获取
Statement myStatement = myConnection.CreateStatement();
myStatement.setFetchSize(20);
从数据库取2000条记录
当设为1  1642毫秒
10 161毫秒
20 91毫秒

Oracle行预获取
OracleStatement myOracleStatement = (OracleSTatement) myConntion.CreateStatement();
myOracleStatement.setRowPrefetch(20);

当设为1  1532毫秒
11 140毫秒
21 80毫秒

4、 定义结果集类型及长度
预先定义结果集列的Java类型,可以节省判断结果集类型往返。
当查询发送到数据库时,会有一次往返判断结果集应该使用的Java类型。
((OracleStatement) myStatement).defineColumnType(1,java.sql.Types.INTEGER);

5、 语句缓存
使用缓存的语句,通常可以将准备语句的时间减少一半,同时还要以避免使用结果集时创建新的游标。
两种类型: 
隐式语句缓存 
前后两次使用的语句字符串完全一样。
  显示语缓存
((OracleStatement)myPrepStatement).closeWithKey(“myCachedStatement”);
6、 数据类型定义
定义成与SQL一样的数据类型。
7、 变量名定义规则
变量大小写一至,SQL 语句字符串大小写一至。

>>>等值关联
select  a.id,a.title,b.columnid
from articleinfo a,articlecolumn b
where a.id=b.articlei;

>>>外关联
select  a.id,a.title,b.columnid
from articleinfo a,articlecolumn b
where a.id=b.articlei(+) and b.articleid not null;

>>>内关联
select  a.id,a.title,b.columnid
from articleinfo a,articlecolumn b
where b.articlei(+)=a.id and b.articleid not null;

>>>等值关联
select a.id,a.title 
from articleinfo a,articlecolumn b
where a.id=b.articleid;

>>>IN关联
Select a.id,a.title from articleinfo a 
Where a.id in(select articleid from articlecolumn b);

>>>等值关联 (40%)
select a.id,a.title 
from articleinfo a
where exists(select b.articleid  from articlecolumn b
where a.id=b.articleid);

>>>创建函数索引
select a.id,a.title
from articleinfo
where trunc(entertime)>=sysdate-30;

create index fun_trunc_entertime on articleinfo(trunc(entertime))

>>>显示使用某个索引
select /*+  articleinfo(fun_trunc_entertime) */ id from articleinfo
where trunc(entertime)>=sysdate-30;

>>>Where子句中的条件顺序
范围越小越靠后
select a.id,b.columnid from articleinfo a,articlecolumn b
where a.id=b.articleid(+) and b.articleid is not null and b.columnid>=353454564564576 and b.columnid<234345344565676; 
• Nested Loops (NL) Join 
• Sort-Merge Join 
• Hash Join (not available with the RBO) 
• Cluster Join

时间: 2024-10-09 02:52:20

JAVA 数据库编程中的性能优化的相关文章

性能调优 -- Java编程中的性能优化

String作为我们使用最频繁的一种对象类型,其性能问题是最容易被忽略的.作为Java中重要的数据类型,是内存中占据空间比较大的一个对象.如何高效地使用字符串,可以帮助我们提升系统的整体性能. 现在,我们就从String对象的实现.特性以及实际使用中的优化这几方面来入手,深入理解以下String的性能优化. 在这之前,首先看一个问题.通过三种方式创建三个对象,然后依次两两匹配,得出的结果是什么?答案留到最后揭晓. 1 String str1 = "abc"; 2 String str2

Java数据库编程中的常用技巧

1.java数据库操作基本流程 2.几个常用的重要技巧: 可滚动.更新的记录集 批量更新 事务处理 java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接 1.取得数据库连接 1)用DriverManager取数据库连接 例子: String className,url,uid,pwd; className = "oracle.jdbc.driver.OracleDriver"; url = "jdbc:oracle:thin:@

java编程中的性能提升问题

java编程中的性能提升 软件产品犹如一栋大楼,大楼在建设初期,会有楼房规划,建筑构想,打牢地基,后面才是施工人员进行进行实质性的建设.要保证软件产品的高质量,优秀的架构,优秀的产品设计,是产生高质量的前提.同时,没有过硬的编码实现,一样得不到预期的效果.纵观现在的产品,产品架构没多大差别,基本运用基线版本进行局点定制.而系统中的一些功能性能常常不过关,问题往往就出在编码实现上.这块是开发人员在开发过程中需要注意的.在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良

java编程中&#39;为了性能&#39;一些尽量做到的地方

java编程中'为了性能'一些尽量做到的地方 2011-08-16 14:34:59|  分类: JAVA |  标签:java编程  缓存经常使用的对象  |举报|字号 最近的机器内存又爆满了,出了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源和总结一些在java编程中尽可能做到的一些地方- 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并

Java编程中提高性能的几点建议

尽量减少对变量的重复计算 如 for(int i=0;i<list.size();i++) 应该改为 for(int i=0,len=list.size();i<len;i++) 并且在循环中应该避免使用复杂的表达式,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 尽量使用移位来代替'a/b'的操作 "/"是一个代价很高的操作,使用移位的操作将会更快和更有效 如 int num = a / 4; int num = a /

Java数据库编程、Java与XML解析技术

Java数据库编程: 1. JDBC概述:JDBC(数据库连接)是Java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类库(位于java.sql和javax.sql包中).用JDBC开发的数据库  应用既可以跨操作系统平台,又可以跨数据库系统平台.    在JDBC的基本操作中,最常用的类和接口包括DriverManager,  Connection,  Statement,  PreparedStatement,  CallableStatement 和 Result

Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)

Java并发编程系列[未完]: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) 一.重量级锁 上篇文章中向大家介绍了Synchronized的用法及其实现的原理.现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的.但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的.而操作系统实现线程之间的切换这就需要从用户态转换到核心

Java多线程编程中Future模式的详解&lt;转&gt;

Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Future模式,关于其他多线程设计模式的地址如下:关于其他多线程设计模式的地址如下:关于Master-Worker模式的详解: Java多线程编程中Master-Worker模式的详解关于Guarded Suspeionsion模式的详解: Java多线程编程中Guarded Suspeionsion模式

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就已经产生了的,后期的优化很多时候所能够带来的改善都只是在解决前妻设计所遗留下来的一些问题而已,而且能够解决的问题通常也比较有限.本章将就如何在 MySQL 数据库 Schema 设计的时候保证尽可能的高效,尽可能减少后期的烦恼. 9.1 高效的模型设计 最规范的就一定