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

2、 批处理:
多用批处理,减少操作数据库次数。

  1. 1)、禁止自动提交
  2. setAutoCommit(false);
  3. 2)、准备一个语句对象
  4. PreparedStatement myPrepStatement = myConnection.prepareStatement(“insert into test_tab(value) values(?)”;
  5. 3)、将语句添加进批中
  6. addBatch();
  7. 4)、执行这批语句
  8. executeBatch();
  9. 5)、提交执行的语句
  10. myConnection.commit();

Oracle新的改进后的批处理:(JDBC2.0以上支持)
   只能对OraclePreparedStatement对象进行处理,其中的sql语句在5-30个是最优化的)
   改进的地方是,可以预设批大小,SQL 语句就会自动添加进批中。

  1. 1)、禁止提交
  2. 2)、设置批值
  3. myoracleConnection.setDefaultExecuteBatch(10);
  4. 3)、对SQL语句进行批处理
  5. for (int count = 0;count<20;count++){
  6. myOraclePrepStatement.setInt(1,count);
  7. int rowsInserted = myOraclePrepStatement.executeUpdate();
  8. }
  9. 注:还可以强制执行int rowsInserted = myOraclePrepStatement.sendBatch();

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

  1. 标准行预获取
  2. Statement myStatement = myConnection.CreateStatement();
  3. myStatement.setFetchSize(20);
  4. 从数据库取2000条记录
  5. 当设为1 1642毫秒
  6. 10 161毫秒
  7. 20 91毫秒
  8.  
  9. Oracle行预获取
  10. OracleStatement myOracleStatement = (OracleSTatement) myConntion.CreateStatement();
  11. myOracleStatement.setRowPrefetch(20);
  12.  
  13. 当设为1  1532毫秒
    11 140毫秒
    21 80毫秒

4、 定义结果集类型及长度
预先定义结果集列的Java类型,可以节省判断结果集类型往返。
当查询发送到数据库时,会有一次往返判断结果集应该使用的Java类型。

  1. ((OracleStatement) myStatement).defineColumnType(1,java.sql.Types.INTEGER);

5、 语句缓存
使用缓存的语句,通常可以将准备语句的时间减少一半,同时还要以避免使用结果集时创建新的游标。
两种类型: 
隐式语句缓存 
前后两次使用的语句字符串完全一样。
  显示语缓存

  1. ((OracleStatementmyPrepStatement).closeWithKey(“myCachedStatement”);

6、 数据类型定义
定义成与SQL一样的数据类型。
7、 变量名定义规则
变量大小写一至,SQL 语句字符串大小写一至。

  1. >>>等值关联
  2. select a.id,a.title,b.columnid
  3. from articleinfo a,articlecolumn b
  4. where a.id=b.articlei;
  5.  
  6. >>>外关联
  7. select a.id,a.title,b.columnid
  8. from articleinfo a,articlecolumn b
  9. where a.id=b.articlei(+) and b.articleid not null;
  10.  
  11. >>>内关联
  12. select a.id,a.title,b.columnid
  13. from articleinfo a,articlecolumn b
  14. where b.articlei(+)=a.id and b.articleid not null;
  15.  
  16. >>>等值关联
  17. select a.id,a.title
  18. from articleinfo a,articlecolumn b
  19. where a.id=b.articleid;
  20.  
  21. >>>IN关联
  22. Select a.id,a.title from articleinfo a
  23. Where a.id in(select articleid from articlecolumn b);
  24.  
  25. >>>等值关联 40%)
  26. select a.id,a.title
  27. from articleinfo a
  28. where exists(select b.articleid from articlecolumn b
  29. where a.id=b.articleid);
  30.  
  31. >>>创建函数索引
  32. select a.id,a.title
  33. from articleinfo
  34. where trunc(entertime)>=sysdate-30;
  35.  
  36. create index fun_trunc_entertime on articleinfo(trunc(entertime))
  37.  
  38. >>>显示使用某个索引
  39. select /*+ articleinfo(fun_trunc_entertime) */ id from articleinfo
  40. where trunc(entertime)>=sysdate-30;
  41.  
  42. >>>Where子句中的条件顺序
  43. 范围越小越靠后
  44. select a.id,b.columnid from articleinfo a,articlecolumn b
  45. where a.id=b.articleid(+) and b.articleid is not null and b.columnid>=353454564564576 and b.columnid<234345344565676;
  46. Nested Loops (NL) Join
  47. Sort-Merge Join
  48. Hash Join (not available with the RBO)
  49. 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. ORBslam总结

    ORBSLAM的优缺点:优点:回环检测做得好,基本上只要见到过的场景都能找回来.采用一种更鲁棒的关键帧和三维点的选择机制——先用宽松的判断条件尽可能及时地加入新的关键帧和三维点, 以保证后续帧的鲁棒跟 ...

  2. python 之生产者消费者模型

    进程实现: import time,random from multiprocessing import Process,Queue def producer(name,q): count= 0 wh ...

  3. Tomcat自定义classLoader加密解密

    class很好反编译,所以需要对class文件先进行加密,然后使用自己的classloader进行解密并加载. [步骤] 大概分两步: 1.对class文件进行加密 2.写解密class文件并加载的c ...

  4. UVa 11520 Fill the Square (水题,暴力)

    题意:给n*n的格子里填上A-Z的字符,保证相邻字符不同,并且字典序最小. 析:直接从第一个格子开始暴力即可,每次判断上下左是不是相同即可. 代码如下: #pragma comment(linker, ...

  5. UVA - 11624 Fire! 双向BFS追击问题

    Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the owner of ...

  6. Telnet 对memcached进行数据操作

    连接Telnet 127.0.0.1 11211 存储数据 add news 0 1 8 (news为数据名称,1为存储的时间,当为0的时候则为永久储存,永久缓存最多为30天,8为长度) aaaaaa ...

  7. shader实例(二十二)TexGen-球面贴图SphereMap

    http://blog.sina.com.cn/s/blog_89d90b7c0102vfqz.html 球面贴图一般用于环境反射,如下图(左边为球面贴图,右边为正常贴图),一个镜面水晶球在这只猫的前 ...

  8. 慕课笔记-Java入门第三季

    1.自定义异常 自定义异常必须继承Exception类或者其子类. 2.字符串 String对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象. 多次创建的字符常量,Java编译程序只 ...

  9. 《http和https协议》

    一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...

  10. python 基础(八) os模块

    OS模块 概念:包含了普遍的操作 系统的功能 一.函数 函数名 函数说明 os.name 获取操作系统类型 nt->Windows posix->Linux/Unix os.listdir ...