`
liuzm
  • 浏览: 101494 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JDBC性能优化的三大技巧

阅读更多
JDBC性能优化的三大技巧
本系列的性能提示将为改善JDBC应用程序的性能介绍一些基本的指导原则,这其中的原则已经被许多现有的JDBC应用程序编译运行并验证过。 这些指导原则包括:
 正确的使用数据库MetaData方法
   只获取需要的数据
   选用最佳性能的功能
   管理连接和更新

  以下这些一般性原则可以帮助你解决一些公共的JDBC系统的性能问题.

  使用数据库Metadata方法

  因为通过ResultSet对象生成的Metadata方法与其它的JDBCB方法相比是较慢的, 经常的使用它们将会削弱系统的的性能. 本节的指导原则将帮助你选择和使用meatdata时优化系统性能.

  少用Metadata方法

  与其它的JDBC方法相比, 由ResultSet对象生成的metadata对象的相对来说是很慢的. 应用程序应该缓存从ResultSet返回的metadata信息,避免多次不必要的执行这个操作.

  几乎没有哪一个JDBC应用程序不用到metadata,虽然如此,你仍可以通过少用它们来改善系统性能. 要返回JDBC规范规定的结果集的所有列信息, 一个简单的metadata的方法调用可能会使JDBC驱动程序去执行很复杂的查询甚至多次查询去取得这些数据. 这些细节上的SQL语言的操作是非常消耗性能的.

  应用程序应该缓存这些metadata信息. 例如, 程序调用一次getTypeInfo方法后就将这些程序所依赖的结果信息缓存. 而任何程序都不大可能用到这些结果信息中的所有内容,所以这些缓存信息应该是不难维护的.

  避免null参数

  在metadata的方法中使用null参数或search patterns是很耗时的. 另外, 额外的查询会导致潜在的网络交通的增加. 应尽可能的提供一些non-null的参数给metadata方法.

  因为metadata的方法很慢, 应用程序要尽可能有效的调用它们. 许多应用程序只传递少量的non-null参数给这些方法.

  例如:

ResultSet WSrs = WSc.getTables (null, null, "WSTable", null);

  应该这样:

ResultSet WSrs = WSc.getTables ("cat1", "johng", "WSTable", "TABLE");

  在第一个getTables()的调用中, 程序可能想知道表'WSTable'是否存在. 当然, JDBC驱动程序会逐个调用它们并且会解译不同的请求. JDBC驱动程序会解译请求为: 返回所有的表, 视图, 系统表, synonyms, 临时表, 或存在于任何数据库类别任何Schema中的任何别名为'WSTable'的对象.

  第二个getTables()的调用会得到更正确的程序想知道的内容. JDBC驱动程序会解译这个请求为: 返回当前数据库类别中所有存在于'johng'这个schema中的所有表.

  很显然, JDBC驱动程序处理第二个请求比处理第一个请求更有效率一些.

  有时, 你所请求信息中的对象有些信息是已知的. 当调用metadata方法时, 程序能传送到驱动程序的的任何有用信息都可以导致性能和可靠性的改善.

  使用'哑元'(dummy)查询确定表的特性

  要避免使用getColumns()去确定一个表的特性. 而应该使用一个‘哑元’查询来使用getMetadata()方法.

  请考虑这样一个程序, 程序中要允许用户选取一些列. 我们是否应该使用getColumns()去返回列信息给用户还是以一个'哑元'查询来调用getMetadata()方法呢?

  案例 1: GetColumns 方法

ResultSet WSrc = WSc.getColumns (... "UnknownTable" ...);
// getColumns()会发出一个查询给数据库系统
. . .
WSrc.next();
string Cname = getString(4);
. . .
// 用户必须从反复从服务器获取N行数据
// N = UnknownTable的列数

  案例 2: GetMetadata 方法

// 准备'哑元'查询
PreparedStatement WSps = WSc.prepareStatement
("Select * from UnknownTable Where 1 = 0");
// 查询从来没有被执行,只是被预储
ResultSetMetaData WSsmd=WSps.getMetaData();
int numcols = WSrsmd.getColumnCount();
...
int ctype = WSrsmd.getColumnType(n)
...
// 获得了列的完整信息 

  在这两个案例中, 一个查询被传送到服务器. 但在案例1中, 查询必须被预储和执行, 结果的描述信息必须确定(以传给getColumns()方法), 并且客户端必须接收一个包含列信息的结果集. 在案例2中, 只要准备一个简单的查询并且只用确定结果描述信息. 很显然, 案例2执行方式更好一些.

  这个讨论有点复杂, 让我们考虑一个没有本地化支持prepared statement的DBMS服务器. 案例1的性能没有改变, 但案例2中, 因为'哑元'查询必须被执行而不是被预储使得它的性能增强了一些. 因为查询中的Where子句总是为FALSE, 查询在不用存取表的数据情况的下会生成没有数据的结果集. 在这种情况下,第二种方式当然比第一种方式好一些.

  总而言之,总是使用ResultSet的metadata方法去获取列信息,像列名,列的数据类型,列的数据精度和长度等. 当要求的信息无法从ResultSet的metadata中获取时才去用getColumns()方法(像列的缺省值这些信息等)。
本篇文章来源于 :刘志猛博客 原文链接:http://www.liuzm.com/article/mysql/9614a.htm
http://www.liuzm.com
分享到:
评论

相关推荐

    优化JDBC性能的三大技巧.doc

    标题中的“优化JDBC性能的三大技巧”是指在开发基于Java的JDBC应用程序时,为了提升性能而采取的关键策略。这些技巧主要集中在正确使用数据库MetaData方法、只获取必要的数据以及选择最佳性能的功能,并且有效管理...

    优化JDBC方法功略

    本文将详细介绍三个主要的JDBC性能优化技巧,并提供了一些通用的准则,以帮助开发者提高JDBC应用程序的运行效率。 首先,正确使用数据库MetaData方法是关键。MetaData方法通常用于获取数据库表、列、索引等元数据...

    Java性能优化技巧集锦

    【Java性能优化技巧集锦】 Java性能优化是一个关键的话题,对于提升应用程序的效率和响应速度至关重要。以下是一些通用和特定领域的性能优化技巧。 一、通用篇 1.1 不用 new 关键词创建类的实例 使用`new`创建...

    Java性能优化技巧集锦.pdf

    标题所指的“Java性能优化技巧集锦”表明文档内容将围绕如何提升Java程序运行效率的各种技巧。从标题中我们可以推测,内容会涵盖Java的多个版本(如Java 1.1, Java 1.2, Java 1.3, Java 1.4, Java 1.5, Java 1.6, ...

    jdbc jdbc jdbc

    9. **性能优化**:JDBC提供了多种优化技巧,如关闭不再需要的资源(如结果集、Statement和连接),使用连接池来重用连接,以及合理使用`PreparedStatement`避免SQL注入。 10. **JDBC API的扩展**:随着技术的发展,...

    高性能 Oracle JDBC 编程

    为了充分利用Oracle数据库的强大能力,开发者需要掌握高性能的JDBC编程技巧,特别是连接池和语句池的运用,这两者能显著提升数据库密集型应用程序的效率。 #### 二、连接池技术解析 **2.1 连接池的概念** 连接池...

    Java性能优化技巧集锦.doc

    Java性能优化技巧集锦 Java性能优化技巧集锦是一篇详细的技术文章,旨在帮助Java开发者提高应用程序的性能。下面是该文章中提到的重要知识点: 一、通用篇 1.1 不用 new 关键词创建类的实例 使用clone()方法创建...

    通过JDBC连接Oracle数据库的十大技巧

    10、监控和调整JDBC性能 了解和监控JDBC的性能至关重要。可以使用JDBC的Profiler工具,或者数据库自带的性能分析工具,如Oracle的DBMS_profiler,来跟踪SQL语句的执行时间,找出性能瓶颈。根据分析结果,调整SQL语句...

    jdbc批量插入大字段

    通过研究和理解这些代码,你可以更好地掌握批量插入Blob数据的技巧,并根据自己的需求进行调整和优化。 总之,批量插入大字段是处理大量Blob数据的关键策略,通过JDBC提供的批处理功能,结合合理的事务管理和内存...

    学习jdbc和Oracle的若干技巧

    #### 技巧三:使用PreparedStatement优化SQL执行效率 在处理频繁重复执行的SQL语句时,使用`PreparedStatement`相比于`Statement`能显著提高执行效率。这是因为`PreparedStatement`会预编译SQL语句,从而减少了每次...

    JDBC连接Oracle的一些技巧

    在JDBC中连接Oracle数据库时,有一些技巧可以帮助提高性能和效率。 1. **选择合适的驱动程序**:Oracle数据库提供了多种驱动程序,包括OCI(Oracle Call Interface)和Thin驱动程序。OCI驱动程序依赖于Oracle客户端...

    通过JDBC连接oracle数据库的十大技巧

    以上六大技巧只是通过JDBC连接Oracle数据库时可以采用的方法的一部分。接下来,我们将继续探讨其他几个实用的技巧: #### 7. 使用连接池管理数据库连接 在大型应用中,频繁地创建和销毁数据库连接会消耗大量的资源...

    JDBC API教程与参考手册(第三版)前言+目录+第一,二章

    - 探讨JDBC性能优化策略及最佳实践。 #### 目录概览 - **第1章:JDBC基础** - JDBC简介 - 安装配置指南 - 第一个JDBC程序 - 连接数据库 - 执行SQL语句 - **第2章:JDBC核心API** - DriverManager类详解 - ...

    Oracle 数据库性能优化与运维最佳实践

    然而,随着数据量的增长和业务需求的增加,数据库性能优化成为了一个至关重要的任务。"Oracle数据库性能优化与运维最佳实践"的主题涵盖了如何确保Oracle数据库高效、稳定运行的关键技术和策略。 首先,性能优化涉及...

    JDBC连接各种数据库经验技巧集萃

    二、JDBC 基本操作与优化技巧 1. 加载驱动与建立连接 在进行数据库连接时,首先需要通过 `Class.forName()` 方法加载对应的 JDBC 驱动,然后使用 `DriverManager.getConnection()` 方法建立连接。但这种做法在现代...

    JDBC使用技巧

    还有一些其他JDBC优化和最佳实践,如使用批处理(`addBatch()` 和 `executeBatch()`)、事务管理(`Connection.setAutoCommit(false)` 和 `Connection.commit()`/`rollback()`)以及连接池(如C3P0、HikariCP等)来...

    JDBC连接数据库经验技巧集萃

    10. **优化性能**:合理设置`Statement`或`PreparedStatement`的fetch size,调整连接超时时间,以及根据需求选择合适的JDBC结果集类型(ForwardOnly、ScrollInsensitive、ScrollSensitive)以优化性能。 总的来说...

Global site tag (gtag.js) - Google Analytics