Java应用或者JavaEE Web应用的性能是很重要的,尤其是数据库后端对应用的性能影响。如果你经历过Java、JavaEE web应用非常慢的案例(处理一个简单的请求都要花上好几秒的时间用于数据库访问,分页、排序等)。下面这些小技巧也许能提升Java应用的性能。

这几个JDBC性能技巧很基础,但是在实践中上很多程序员经常忽略它们。

JDBC性能技巧一:使用缓存

查出应用中有多少数据库调用 ,然后把它们减到最少。

因为连接到数据库需要准备好连接(connections),还有往返的网络传输和数据库系统后端的处理。如果可以把数据缓存下来的话这是减少数据库调用最好的方式,即使你的应用有完全动态的数据,短暂的缓存可以节省很大的数据往返的传输。

加速Java应用后至少能减少20-50%的数据库调用,如果想找出数据库调用,那么仅仅把DAO层的每个db调用中记录到日志中就行,如果记录好每个线程进入和退出数据库访问的时间更好,它能告诉你一个调用究竟花了多少时间。

JDBC性能技巧二:使用数据库索引

检查数据库列上(columns)是否有索引。

程序员中常犯这个错误,有索引和没有索引在做查询时有巨大的差异。当然,合适的索引更重要,太多的索引反而会减慢数据的插入和更新操作。因此使用索引的时候要小心,象id、类别(category)、类(class)等字段上做索引是经常使用的。

JDBC性能技巧三:使用PreparedStatement

使用PreparedStatement或者存储过程(Stored Procedure)执行查询时PreparedStatement(预处理语句)比普通的Statement对象要快。

因为数据库可以对查询语句做预处理何查询缓存计划。 因此总是使用 ** 参数化形式的预处理语句** 如SELECT * FROM table WHERE id=?,而不要使用SELECT * FROM table WHERE id='"+id "',虽然后者仍是一个预处理语句但不是参数化的。使用第二种查询方式在性能上没有任何优势。

JDBC性能技巧四:使用数据库连接池

连接池用来存放数据库连接(Connection)。

创建数据库连接是个比较慢的过程而且会耗很长时间,所以如果每个请求都要创建一个连接,那么响应时间将会更长。用连接池根据上游的流量及并发请求数创建适当数量的连接。即使连接池在开始的请求中创建连接、缓存连接会比较慢,但总体还是能减不少开销。

JDBC性能技巧五:使用JDBC批量更新

使用JDBC批量更新操作能显著提升Java数据库应用的性能。

通过使用Statment或者PreparedStatement做批量查询。用executeBatch()方法做批量查询。

JDBC性能技巧六:取消自动提交

查询时设置setAutoCommit(false),默认JDBC连接自动提交模式是打开的,意味着每个独立的SQL语句都将在自己的事务中执行。然而你可以把SQL语句按组归到一个逻辑事务中去,这样通过调用commit()rollback()要么提交要么回滚。试着运行相同数量的查询次数对比一下使用自动提交和不使用自动提交时的性能区别有多大的差异性。

这些Java数据库应用性能技巧看起来非常简单,很多高级Java程序员能熟练运用在生产级代码中,但对于新手来说有必要记住它使用它,同时你还可以使用这些Java性能小提示作为代码审查机制的一个参考,在你写的Java应用是使用数据库作为后端存储的时候。