快速业务通道

优化JDBC性能的三大技巧 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
网络到数据库的通讯。

对于使用PreparedStatement池的情况下, 本指导原则有点复杂。当使用PreparedStatement池时, 如果一个查询很特殊, 并且不太会再次执行到, 那么可以使用Statement。如果一个查询很少会被执行,但连接池中的Statement池可能被再次执行, 那么请使用PreparedStatement。在不是Statement池的同样情况下, 请使用Statement。

使用PreparedStatement的Batch功能

Update大量的数据时, 先Prepare一个INSERT语句再多次的执行, 会导致很多次的网络连接。要减少JDBC的调用次数改善性能, 你可以使用PreparedStatement的AddBatch()方法一次性发送多个查询给数据库. 例如, 让我们来比较一下下面的例子。

例 1: 多次执行Prepared Statement

PreparedStatement ps = conn.prepareStatement( "INSERT into employees values (?, ?, ?)"); for (n = 0; n < 100; n++) { ps.setString(name[n]); ps.setLong(id[n]); ps.setInt(salary[n]); ps.executeUpdate(); }

例 2: 使用Batch

PreparedStatement ps = conn.prepareStatement( "INSERT into employees values (?, ?, ?)"); for (n = 0; n < 100; n++) { ps.setString(name[n]); ps.setLong(id[n]); ps.setInt(salary[n]); ps.addBatch(); } ps.executeBatch();

在例 1中, PreparedStatement被用来多次执行INSERT语句。在这里, 执行了100次INSERT操作, 共有101次网络往返。其中,1次往返是预储statement, 另外100次往返执行每个迭代。在例2中, 当在100次INSERT操作中使用addBatch()方法时, 只有两次网络往返。1次往返是预储statement, 另一次是执行batch命令。虽然Batch命令会用到更多的数据库的CPU周期, 但是通过减少网络往返,性能得到提高。记住, JDBC的性能最大的增进是减少JDBC驱动与数据库之间的网络通讯。

优化JDBC性能的三大技巧(5)

时间:2010-12-11

选择合适的光标类型

选择适用的光标类型以最大限度的适用你的应用程序. 本节主要讨论三种光标类型的性能问题。

对于从一个表中顺序读取所有记录的情况来说, Forward-Only型的光标提供了最好的性能. 获取表中的数据时, 没有哪种方法比使用Forward-Only型的光标更快. 但不管怎样, 当程序中必须按无次序的方式处理数据行时, 这种光标就无法使用了。

对于程序中要求与数据库的数据同步以及要能够在结果集中前后移动光标, 使用JDBC的Scroll-Insensitive型光标是较理想的选择。此类型的光标在第一次请求时就获取了所有的数据(当JDBC驱动采用''lazy''方式获取数据时或许是很多的而不是全部的数据)并且储存在客户端。因此, 第一次请求会非常慢, 特别是请求长数据时会理严重。而接下来的请求并不会造成任何网络往返(当使用''lazy''方法时或许只是有限的网络交通) 并且处理起来很快。因为第一次请求速度很慢, Scroll-Insensitive型光标不应该被使用在单行数据的获取上。当有要返回长数据时, 开发者也应避免使用Scroll-Insensitive型光标, 因为这样可能会造成内存耗尽。有些Scroll-Insensitive型光标的实现方式是在数据库的临时表中缓存数据来避免性能问题, 但多数还是将数据缓存在应用程序中。

Scroll-Sensitive型光标, 有时也称为Keyset-Driven光标, 使用标识符, 像数据库的ROWID之类。当每次在结果集移动光标时, 会重新该标识符的数据。因为每次请求都会有网络往返, 性能可能会很慢。无论怎样, 用无序方式的返回结果行对性能的改善是没有帮助的。

现在来解释一下这个, 来看这种情况:一个程序要正常的返回1000行数据到程序中,在执行时或者第一行被请求时, JDBC驱动不会执行程序提供的SELECT语句,相反,它会用键标识符来替换SELECT查询, 例如, ROWID。然后修改过的查询都会被驱动程序

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号