为应用选择最好最快的 JDBC 驱动 ,参考本站文章 。 JDBC3.0提供了新的特性来提高性能,诸如连接池, statemente池的改进对数据库使用连接池并且重用连接,而不要重复打开和关闭连接。最佳的连接池大小是当连接池大到足够使服务请求不等待
· 尽量使用支持 JDBC3.0 的驱动,因为 JDBC3.0 支持包括 DataSource 对象,连接池,分布式事务支持, RowSets 和 prepared statement 池等性能增强特性
· Prepared statement 池(自从 JDBC3.0 开始有)高速缓存已经预先优化并运行了的 SQL 查询,这样,他们被再次请求的时候,不必经历再次的优化预处理(避免最优化步骤,诸如检查语法,验证地址,优化访问路径和执行计划)。 Statement 池是一个很好的,重要的性能优化方法
· JDBC3.0 中的 Statement 池和连接池能合作共享 statement 池,这样,能使用一个已高速缓存的 statement (该 statement 来自另外一个连接)的连接,在由任一连接执行的 一些SQL 首次被执行时,产生的 statement 准备开销仅一次
· RowSet对象与 ResultSet 对象相似,但是能提供当断开连接的时候对数据库数据的访问。这允许数据以它最简单的形式被高效的高速缓存
· 用同一个连接执行多个 statements
· 关闭 autocommit ,但不要让事务打开太久
· 避免将事务分布开(事务跨越多个连接)
· 最小化数据库的行和列数据获取。使用 setMaxRows, setMaxFieldSize,和 SetFetchSize
· 使用最高效的数据类型:字符串比整数型快,整数型比浮点类型和时间戳类型都要高效(是否不太理解^&^,这是针对DB2数据库处理来说的,处理character类型最快,而处理integer类型通常需要一些转换或者字节排序)
· 使用 updateXXX()方法更新: updateXXX() 在可更新的结果集上调用。结果集已经定位到了一行 , 因此当使用一个 UPDATE statement 时,可以消除通常的查找要更新的数据行的开销
· Cache任何请求的元数据( metadata )并尽可能少的使用元数据 方法,其慢的程度一用便知
· 避免在元数据 查询中使用 null 参数
· 使用虚拟查询获得一行的元数据,不要使用getcolumns()(假如应用允许用户使用列数据,应用是使用getColumns来返回列的信息给用户还是准备一个虚拟查询而后调用getMetadata呢?
· 使用存储过程,避免多余的网络传输
· 在存储过程中使用参量,不要将数据挨个地放在statement中,最小化解析开销。此条针对DB2来说,其它数据库未必适用。SQL总是以字符串形式发送给DB2数据库,例如:
CallableStatement cstmt = conn.prepareCall ("call getCustName (12345)");
ResultSet rs = cstmt.executeQuery ();
DB2服务器必须解析该SQL,验证参量类型,并将参量转化为正确的数据类型。
· 对需要重复执行的statement使用预处理statement(PreparedStatement)
· 选择使用最佳游标:对连续读取使用游标;对双向滚动使用游标。对仅返回一行的查询避免使用游标。
· 在JVM中Cache频繁请求的数据,避免不必要的数据库请求
· 采用预读取机制, 批量取行,而不要一次一行 。调整批大小和预取行的数量。避免使用预取 BLOB 数据。
· 除非绝对需要,否则避免移动数据
· 在数据穿过网络之前要使流化数据( Streamline data )
· 避免每次处理一行,尽可能一起处理多行。
· 在表中统计个数(例如:使用 select count(*) from myTable,yourTable where …)属于资源密集型的。试试首先选入临时表,仅返回该计数(count),然后发送精确的二次查询获得临时表中的行的子集。
· 恰当的使用 SQL 能减少资源请求。使用返回所需数据的最小值的查询:避免 select * 查询。一个返回小的数据子集的复杂查询,比一个简单的,返回超过所需的大量数据的简单查询更高效。
· 使你的查询尽可能精巧,例如:尽可能精确地最小化要传输的数据,使其是所需的子集
· 努力批量更新:将 statement 收集到一起,然后在一个事务里面一起执行。如果可能,使用有条件的逻辑和临时变量来达到 statement 批处理
· 永远不要让 DBMS 事务跨越用户输入
· 考虑使用乐观锁。乐观锁使用时间戳验证数据是否还没有被其他用户改变,否则事务失败
· 使用 恰当的更新,例如:更新行/表中已经存在的数据,而不要添加或者删除行/表。在适当的位置更新数据要比移动数据快得多,如果更新需要的空间比表设计能提供 的更多,这可能是需要的。如果你设计的行需要空间初始化,更新将会更快。交易是你的表可能需要更多的磁盘空间,但可能速度更快。由于磁盘空间是便宜的,使 用一点点能提高性能,这应该说是非常有价值的投资
· 分开存储正在操作的数据和历史数据(更一般的情况是将频繁使用的数据和不常使用的数据分开存储)
· 尽可能小的保留你的操作数据集,避免必须读那些不相关的数据
· DBMS可以很好的并行运转,尽量将应用设计成当和 DBMS交互时应用能做其他事情。
· 使用流水线操作和并行操作。 将应用设计成支持大量并行进程, 使应用运行更快。如果要处理多步,努力设计好应用,以使后来的步骤能够在任何优先的进程已经完成的数据部分上开始工作,而不是必须等到优先进程完成
· 事物的保护级别越高,性能损失就越大。事物级别按增长的顺序为: TRANSACTION_NONE, TRANSACTION_READ_UNCOMMITTED, TRANSACTION_READ_COMMITTED, TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE。使用Connection.setTransactionIsolation() 设置你想要的事物级别
· 默认的自动提交模式由于使每一个数据库命令都成为一个单独的事务,这会严重影响性能,关闭自动提交(Connection.setAutoCommit(false) ),明确声明事务
· 通过整合多个事务为一个的批量操作,并在一个statement中使用Statement.addBatch() 和Statement.executeBatch()
· Savepoints (from JDBC3.0)需要昂贵的资源。一旦不再需要,就立刻使用Connection.releaseSavepoint()释放掉Savepoints
· ConnectionPoolDataSource (from JDBC3.0)和PooledConnection接口为连接池提供了built-in支持
· 使用setLogWriter() (from Driver, DataSource, or ConnectionPooledDataSource; from JDBC3.0) 帮助跟踪JDBC流
· 使用Connection.setReadOnly(true)优化只读数据库(操作)交互
· 使用Connection.nativeSQL()察看SQL查询如何在数据库种执行,帮助确保SQL已被优化
·切记:一旦可能,立刻关闭Statement和ResultSet
·使用DatabaseMetaData获得数据库功能性信息
·一直捕捉和处理数据库警告和异常
·使用最恰当的数据类型明确数据的类型,例如:以date类型存储日期,儿不要用varchar
·使用可滚动ResultSet (JDBC 2.0)
分享到:
相关推荐
### JDBC性能优化详解 #### 一、引言 在当今数据密集型的应用环境中,Java数据库连接(JDBC)作为Java应用程序与数据库之间的重要桥梁,其性能优化显得尤为重要。本文将根据“JDBC性能优化.pdf”文件提供的信息,...
本文将详细介绍三个主要的JDBC性能优化技巧,并提供了一些通用的准则,以帮助开发者提高JDBC应用程序的运行效率。 首先,正确使用数据库MetaData方法是关键。MetaData方法通常用于获取数据库表、列、索引等元数据...
标题中的“优化JDBC性能的三大技巧”是指在开发基于Java的JDBC应用程序时,为了提升性能而采取的关键策略。这些技巧主要集中在正确使用数据库MetaData方法、只获取必要的数据以及选择最佳性能的功能,并且有效管理...
JDBC性能优化 - 使用PreparedStatement代替Statement,减少SQL解析时间。 - 使用批处理处理大量插入或更新操作。 - 合理设置JDBC连接池大小,避免频繁创建和销毁连接。 - 使用Statement的`setFetchSize()`方法控制...
在IT行业中,数据库连接管理是应用系统性能优化的关键环节之一,而JDBC连接池就是解决这一问题的有效工具。本文将详细讲解JDBC连接池的工作原理、配置方法以及如何通过优化来提升连接速度。 JDBC(Java Database ...
JDBC性能优化** - 使用PreparedStatement而非Statement,避免SQL注入并提高效率。 - 执行批处理操作,一次性提交多个SQL语句。 - 使用连接池管理数据库连接,避免频繁创建和销毁连接。 - 设置合适的事务隔离级别,...
然而,在使用Spark与数据库交互时,尤其是使用JDBC(Java Database Connectivity)读取数据时,如果不优化并发度,很容易造成性能瓶颈。特别是在面对大规模数据集时,单线程任务过重会导致任务执行缓慢甚至挂起,...
3. **JDBC性能优化** - 使用PreparedStatement:预编译的SQL可以提高执行效率,避免SQL注入攻击。 - 批量处理:通过`addBatch()`和`executeBatch()`方法,可以一次性提交多条SQL语句,提高效率。 - 数据库连接池...
6. **JDBC性能优化**: - 使用PreparedStatement替代Statement,提高SQL执行效率,避免SQL注入问题。 - 分批处理批量插入或更新,减少网络通信次数。 - 使用连接池管理数据库连接,避免频繁创建和销毁连接。 - ...
6. **JDBC性能优化**: - 使用连接池管理数据库连接,可以提高性能并减少资源消耗。 - 对于大数据量操作,考虑使用批处理(Batch Processing)来提升效率。 - 注意调整SQL语句,避免全表扫描,利用索引提高查询速度...
- 探讨JDBC性能优化策略及最佳实践。 #### 目录概览 - **第1章:JDBC基础** - JDBC简介 - 安装配置指南 - 第一个JDBC程序 - 连接数据库 - 执行SQL语句 - **第2章:JDBC核心API** - DriverManager类详解 - ...
六、JDBC性能优化 1. 使用PreparedStatement而非Statement,因为PreparedStatement可以被缓存,减少解析和编译的时间。 2. 执行批处理操作,减少网络往返次数。 3. 使用连接池管理数据库连接,避免频繁创建和关闭...
10. **JDBC性能优化** 优化JDBC应用包括:减少数据库往返次数(例如,批量处理、联合查询),使用PreparedStatement代替Statement,合理设置连接池参数,以及正确关闭资源等。 总结,JDBC高级教程涵盖了从基础的...
9. **JDBC性能优化** - 使用PreparedStatement替代Statement,减少解析时间。 - 合理设置批处理大小,避免内存溢出。 - 使用连接池,减少连接创建和销毁的开销。 - 及时关闭结果集、语句和连接,释放资源。 10....
10. **JDBC优化**:使用`PreparedStatement`而非`Statement`,批处理操作,设置合适的缓冲大小,以及及时关闭资源都是常见的JDBC性能优化手段。 综上所述,"java-jdbc-end"这个实例可能涵盖了从连接数据库、执行SQL...
JDBC性能优化 - 使用PreparedStatement代替Statement,预编译SQL可以减少解析时间。 - 使用批处理操作,减少网络通信次数。 - 打开和关闭数据库连接应尽可能快,考虑使用连接池(如C3P0、HikariCP)管理连接,避免...
总结来说,iBATIS3提供了更高的开发效率和易用性,而JDBC则在性能优化和灵活性上有优势。选择哪个取决于项目需求,例如,对于快速开发和维护的小型项目,iBATIS3可能是更好的选择;而对于性能要求极高,且需要深度...
6. **JDBC性能优化**: - 使用PreparedStatement代替Statement,以预编译SQL,提高效率并防止SQL注入。 - 使用批处理操作批量执行SQL,减少网络通信次数。 - 及时关闭不再使用的资源,避免内存泄漏。 7. **事务...
总的来说,理解和掌握批量插入技术,无论是使用JDBC还是Mybatis,都能帮助我们优化数据库操作,提升系统性能。对于大型项目,合理利用批量插入策略,结合数据库的性能调优,可以显著提高服务响应速度和用户体验。
TongWeb5.0性能优化配置是一个多方面的工程,涵盖了从JNDI和JDBC连接池的创建与优化,到项目配置、JVM参数、日志级别以及线程数的调整。这些步骤虽然需要一定的技术知识和操作经验,但通过细心配置和优化,能够显著...