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

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

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

    String作为我们使用最频繁的一种对象类型,其性能问题是最容易被忽略的.作为Java中重要的数据类型,是内存中占据空间比较大的一个对象.如何高效地使用字符串,可以帮助我们提升系统的整体性能. 现在, ...

  2. Java多线程编程中Future模式的详解

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

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

    Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...

  4. Java多线程编程中Future模式的详解<转>

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  5. Mysql数据库调优和性能优化的21条最佳实践

    Mysql数据库调优和性能优化的21条最佳实践 1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开 ...

  6. 针对于Java的35 个代码性能优化总结

    针对于Java的35 个代码性能优化总结前言代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的 ...

  7. 菜鸡的Java笔记 java数据库编程(JDBC)

    java数据库编程(JDBC)        介绍 JDBC 的基本功能            content (内容)        现在几乎所有的项目开发过程之中都不可能离开数据库,所以在java ...

  8. 使用ThinkPHP开发中MySQL性能优化的最佳21条经验

    使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更 ...

  9. java面向对象下:Java数据库编程

    19.Java数据库编程: JDBC概述:        JDBC(Java Database Connection)是java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类 ...

随机推荐

  1. 微信小程序开发之页面跳转并携带参数

    接口: wx.navigateTo({url:......})   保留当前页面,跳转到应用内指定URL页面,导航栏左上角有返回按钮 wx.redirecTo({url:.....})       关 ...

  2. 《剑指offer》面试题15—输出链表中倒数第n个结点

    题目:如题,且从1开始计数. 思路:要求只遍历一遍链表:设置两个指针,一个先走n步后另一个开始同步后移,当快指针已经到链表尾时慢指针正好到要输出的结点. 注意:本题思路比较好想到,主要考察的是代码的鲁 ...

  3. node中的url模块解析结果

    1. URL模块作用: url 模块用于处理与解析 URL. 使用方法如下: const url = require('url'); 2. URL 字符串与 URL 对象 URL 字符串是结构化的字符 ...

  4. [Xcode 实际操作]九、实用进阶-(19)重写父类的绘图方法,使用图形上下文绘制自定义图形

    目录:[Swift]Xcode实际操作 本文将演示如何使用图形上下文,绘制自定义图形. 使用快捷键[Command]+[N]创建一个新的类文件. (在项目文件夹[DemoApp]上点击鼠标右键[New ...

  5. Web前端篇:CSS常用格式化排版、盒模型、浮动、定位、背景边框属性

    目录 Web前端篇:CSS常用格式化排版.盒模型.浮动.定位.背景边框属性 1.常用格式化排版 2.CSS盒模型 3.浮动 4.定位 5.背景属性和边框属性 6.网页中规范和错误问题 7.显示方式 W ...

  6. 有趣的JS存储 连等问题

    五个月不见了,你是不是和我一样又帅了,今天我们先来看一道经典的关于JS存储的题目,来一场紧张又刺激的脑内吃鸡大战吧: var a = {n:1}; a.x = a = {n:2}; console.l ...

  7. struts工作原理

    在struts2的应用中,从用户请求到服务器返回相应响应给用户端的过程中,包含了许多组件如:Controller.ActionProxy.ActionMapping.Configuration Man ...

  8. for循环 与 for in 循环

    json是js里的一种数据格式.var obj={a:15,b:8,c:12}         这是个json对象 var arr=[15,8,12]; 数组alert(obj.a); ---15al ...

  9. C# 面向对象之继承

    Object是所有类的基类 1.在C#中一个类可以继承另一个类(密封类除外,静态类是密封的不能被继承); 2.被继承的类被成为基类(父类);继承的类被成为派生类(子类); 3.子类将获得父类除构造函数 ...

  10. 洛谷1072(gcd的运用)

    已知正整数a0,a1,b0,b1,设某未知正整数x满足: 1. x 和 a0 的最大公约数是 a1​: 2. x 和 b0​ 的最小公倍数是b1. Hankson 的“逆问题”就是求出满足条件的正整数 ...