JDBC性能小贴
本文由 ImportNew - 刘志军 翻译自 javarevisited。如需转载本文,请先参见文章末尾处的转载要求。
本文收集了一些用于提升JDBC性能的方法。Java应用或者JavaEE Web应用的性能是很重要的,尤其是数据库后端对应用的性能影响。不知你是否经历过Java、JavaEE web应用非常慢的案例没有(处理一个简单的请求都要花上好几秒的时间用于数据库访问,分页、排序等)。下面这些贴士也许能提升Java应用的性能。它们非常简单同时还可以应用于其它编程语言,如果是用数据库作为后端存储的话。
这几个JDBC性能贴示不见得有多酷或者有些你从没听说过,虽然讲的很基础但是在实践中上很多程序员经常忽略它们,当然你可能把标题称为数据库性能提示。
JDBC性能贴士一:使用缓存
查出应用中有 多少数据库调用 ,然后把它们减到最少,不管你信不信性能问题大多数情况下罪魁祸首是访问数据库的那些代码。因为连接到数据库需要准备好连接(connections),还有往返的网络传输和数据库系统后端的处理。如果你可以把数据缓存下来的话这是减少数据库调用最好的方式,即使你的应用有完全动态的数据,短暂的缓存可以节省很大的数据苦往返的传输。加速Java应用后至少能减少20-50%的数据库调用,如果想找出数据库调用,那么仅仅把DAO层的每个db调用中记录到日志中就行,如果记录好每个线程进入和退出数据库访问的时间更好,它能告诉你一个调用究竟花了多少时间。
JDBC性能贴士二:使用数据库索引
检查数据库列上(columns)是否有索引,如果你正做查询发现所花的时间比预想的要长,那么首先想到的是检查在列上(正在查询的where子句中的那列)是否做了索引。程序员中常犯这个错误,有索引和没有索引在做查询时有巨大的差异。这条贴士在性能上至少能提速100%,当然合适的索引更重要,太多的索引反而会减慢数据的插入和更新操作。因此使用索引的时候要小心,象id、类别(category)、类(class)等字段上做索引是经常使用的。
JDBC性能贴士三:使用PreparedStatement
使用PreparedStatement或者存储过程(Stored Procedure)执行查询时PreparedStatement(预处理语句)比普通的Statement对象要快。因为数据库可以对查询语句做预处理何查询缓存计划。 因此总是使用 ** 参数化形式的预处理语句** 如SELECT,而不要使用
* FROM table WHERE id=?SELECT * FROM table WHERE id='"+id,虽然后者仍是一个预处理语句但不是参数化的。使用第二种查询方式在性能上没有任何优势,更多参考可以查下看JDBC为什么要使用PreparedStatement而不是Statement
"'
JDBC性能贴士四:使用数据库连接池
连接池用来存放数据库连接(Connection),创建数据库连接是个比较慢的过程而且会耗很长时间。所以如果每个请求都要创建一个连接,那么显然响应时间将会更长。用连接池根据上游的流量及并发请求数创建适当数量的连接。即使连接池在开始的请求中创建连接、缓存连接会比较慢,但总体还是能减不少开销。
JDBC性能贴士五:使用JDBC批量更新
使用JDBC批量更新操作能显著提升Java数据库应用的性能。你应该始终用批量处理来执行插入和更新操作。通过使用Statment或者PreparedStatement做批量查询。用executeBatch()方法做批量查询。
JDBC性能贴士六:取消自动提交
查询时设置setAutoCommit(false),默认JDBC连接自动提交模式是打开的,意味着每个独立的SQL语句都将在自己的事务中执行。然而你可以把SQL语句按组归到一个逻辑事务中去,这样通过调用commit()或rollback()要么提交要么回滚。试着运行相同数量的查询次数对比一下使用自动提交和不使用自动提交时的性能区别有多大的差异性。
这些Java数据库应用性能小提示看起来非常简单,很多高级Java程序员能熟练运用在生产级代码中,但我还看到很多Java程序员并没有在乎这些,直到他们发现Java应用变得很慢时。所以对于新手来说有必要记住它使用它。同时你还可以使用这些Java性能小提示作为代码审查机制的一个参考,在你写的Java应用是使用数据库作为后端存储的时候。
以上就是关于如何改善Java应用程序的性能的贴士,如果你有什么更好的提示不妨给我留言。
原文链接: javarevisited 翻译: ImportNew.com- 刘志军
译文链接: http://www.importnew.com/6100.html
JDBC性能小贴的更多相关文章
- JDBC性能分析与优化
JDBC性能分析与优化V1.0http://www.docin.com/p-758600080.html
- android性能小贴士 翻译
转自http://developer.android.com/training/articles/perf-tips.html 性能小贴士: 这篇文档主要一些微优化可以提升应用程序性能,但是这些改变不 ...
- 五个 .NET 性能小贴士
原文:bit.ly/3wSpO4o 作者:Nikita Starichenko 翻译:精致码农 大家好!今天我想和大家分享几个 .NET 的性能小贴士与基准测试. 我的系统环境: BenchmarkD ...
- C++ 性能小测 1 二维数组的遍历效率
C++ 性能小测 1 二维数组的遍历效率 遍历二维数组时,常规思路是使用一个嵌套循环.一方面,由于 CPU 使用了分支预测技术,因此通常将循环次数最多循环的放在最内层.另一方面,由于二维数组是按行存储 ...
- jdbc简单小登陆demo
package com.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultS ...
- JDBC性能优化方案
最近用到了利用JDBC查询Oracle数据库.可是查询效率不尽人意.研究了一下JDBC方面能够优化的地方,在这里跟大家分享一下. 1.设置最优的预取值 defaultRowP ...
- HTTP性能小测试
一直说node.js如何如何好,就来测试一下吧~~ 首先接受一个小工具 Apache Bench简称ab 可以用来测试http性能 利用Apache Bench测试Web引擎性能关于此工具的详细介绍参 ...
- Elasticsearch 学习之提升性能小贴士
小贴士1:规划索引.分片 以及集群增长情况 ES使得创建大量索引和超大量分片非常地容易,但更重要的是理解每个索引和分片都是一笔开销.如果拥有太多的索引或分片,单单是管理负荷就会影响到ES集群的性能,潜 ...
- log4net性能小探
初步测试了Log4性能.Appender架构如下. 一般客户端,使用FileAppender,把Log记录在本地磁盘. <lockingModel type="log4net.Appe ...
- JDBC性能优化篇
系统性能. 少用Metadata方法 与其它的JDBC方法相比, 由ResultSet对象生成的metadata对象的相对来说是很慢的. 应用程序应该缓存从ResultSet返回的metada ...
随机推荐
- maven 打包 pom build
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframew ...
- vue echarts map 中国地图显示不出来
测试区忽然无法显示中国地图,所以对比了一下测试区与开发环境中echarts版本的区别 测试区echarts版本为 5.4.2 开发环境为5.0.2 所以将package.json中的 "ec ...
- 17 Python异常处理(捕获异常、抛出异常、自定义异常)
本篇是 Python 系列教程第 17 篇,更多内容敬请访问我的 Python 合集 当我们编写代码时,可能会遇到各种各样的错误情况,比如除数为零.找不到文件.网络问题等等.为了优雅地处理这些问题,P ...
- 技术储备--SPI接口硬件协议栈芯片W5500使用
整体思路: 移植官方软件包代码, 配置好底层的SPI收发函数以及片选脚操作, 至于临界区操作函数,根据实际情况进行添加,也可以不加. 这就移植好了,就可以在我们自己的板子上跑官方的示例程序了. 官方软 ...
- Windows自动更新hosts(bat脚本方式)
为了解决无法打开 github 网页的问题,才有了这个自动更新hosts 的命令脚本 hosts 里的内容会每日更新,内容从这里拿 文件:https://raw.hellogithub.com/hos ...
- .NET 开源 EF Core 批处理扩展工具,真好用
前言 Entity Framework Core(EF Core)作为 .NET 生态系统中受欢迎的对象关系映射器(ORM),其轻量级.可扩展性和支持多个数据库引擎而备受青睐. 本文将介绍一款.NET ...
- Android系统之System Server大纲
前言 System Server是android 基本服务的提供者,是android系统运行的最基本需求,所有server运行在一个叫system_process的进程中,system_process ...
- iOS中使用UITextView设置不同文本部分点击事件小结
最近在项目开发中遇到了设置多行文本,点击蓝色邮箱部分跳转到发邮件页面功能.当然比较简单的方式是多标签单独设置,那样稍显麻烦.我们能不能用一个控件,给某一部分添加点击事件,结果是可以的,UITextVi ...
- 018 人生中第一次用 Python 写的一个小程序_猜年龄(再次强调,重视基础)
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...
- Android复习(三)清单文件中的元素——>action、activity-alias、category、compatible-screens、data
<action> 语法: <action android:name="string" /> 包含于: <intent-filter> 说明: ...