JDBC优化技巧

l 为应用选择最好最快的 JDBC 驱动 , JDBC3.0提供了新的特性来提高性能,诸如连接池, statemente池的改进

l 尽量使用支持 JDBC3.0 的驱动,因为 JDBC3.0 支持包括 DataSource 对象,连接池,分布式事务支持, RowSets 和 prepared statement 池等性能增强特性

l JDBC3.0 中的 Statement 池和连接池能合作共享 statement 池,这样,能使用一个已高速缓存的 statement (该 statement 来自另外一个连接)的连接,在由任一连接执行的 一些SQL 首次被执行时,产生的 statement 准备开销仅一次

l 用同一个连接执行多个 statements

l 避免将事务分布开(事务跨越多个连接)

l 使用最高效的数据类型:字符串比整数型快,整数型比浮点类型和时间戳类型都要高效(是否不太理解^&^,这是针对DB2数据库处理来说的,处理character类型最快,而处理integer类型通常需要一些转换或者字节排序)

l Cache任何请求的元数据( metadata )并尽可能少的使用元数据 方法,其慢的程度一用便知

l 使用虚拟查询获得一行的元数据,不要使用getcolumns()(假如应用允许用户使用列数据,应用是使用getColumns来返回列的信息给用户还是准备一个虚拟查询而后调用getMetadata呢?

l 在存储过程中使用参量,不要将数据挨个地放在statement中,最小化解析开销。此条针对DB2来说,其它数据库未必适用。SQL总是以字符串形式发送给DB2数据库,例如:
ResultSet rs = cstmt.executeQuery ();

l 对需要重复执行的statement使用预处理statement(PreparedStatement)

l 在JVM中Cache频繁请求的数据,避免不必要的数据库请求

l 除非绝对需要,否则避免移动数据

l 避免每次处理一行,尽可能一起处理多行。

l 恰当的使用 SQL 能减少资源请求。使用返回所需数据的最小值的查询:避免 select * 查询。一个返回小的数据子集的复杂查询,比一个简单的,返回超过所需的大量数据的简单查询更高效。

l 努力批量更新:将 statement 收集到一起,然后在一个事务里面一起执行。如果可能,使用有条件的逻辑和临时变量来达到 statement 批处理

l 考虑使用乐观锁。乐观锁使用时间戳验证数据是否还没有被其他用户改变,否则事务失败

l 分开存储正在操作的数据和历史数据(更一般的情况是将频繁使用的数据和不常使用的数据分开存储)

l DBMS可以很好的并行运转,尽量将应用设计成当和 DBMS交互时应用能做其他事情。

l 事物的保护级别越高,性能损失就越大。事物级别按增长的顺序为: TRANSACTION_NONE, TRANSACTION_READ_UNCOMMITTED, TRANSACTION_READ_COMMITTED, TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE。使用Connection.setTransactionIsolation() 设置你想要的事物级别

l 通过整合多个事务为一个的批量操作,并在一个statement中使用Statement.addBatch() 和Statement.executeBatch()

l ConnectionPoolDataSource (from JDBC3.0)和PooledConnection接口为连接池提供了built-in支持

l 使用Connection.setReadOnly(true)优化只读数据库(操作)交互

l 切记:一旦可能,立刻关闭Statement和ResultSet

l 一直捕捉和处理数据库警告和异常

l 使用可滚动ResultSet (JDBC 2.0)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值