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 ...
随机推荐
- spark 解析 kafka message
备用 https://databricks.com/blog/2018/11/30/apache-avro-as-a-built-in-data-source-in-apache-spark-2-4. ...
- 常回家看看之house_of_kiwi
house of kiwi 前言:house_of_kiwi 一般是通过触发__malloc_assert来刷新IO流,最后可以劫持程序流或者通过和setcontext来打配合来进行栈迁移来得到fla ...
- C#阿里境外服务器部署企业邮箱发邮件代码
static string accountName = "发件人邮箱"; static string password = "发件人邮箱密码"; static ...
- Angular 18+ 高级教程 – EventManagerPlugin & Hammer.js Gesture
前言 今天来揭秘一下 Angular 的 Event Listening,看看它底层有什么好玩的地方. (keydown.enter) 语法 在 Component 组件 の Template Bin ...
- Figma 学习笔记 – Image
参考: Figma Tutorial: Images 3 Ways to Insert Image 1. rectangle / frame + fill 画一个 rectangle / frame ...
- Log4j2—漏洞分析(CVE-2021-44228)
目录 Log4j2漏洞原理 漏洞根因 调用链源码分析 调用链总结 漏洞复现 dns rmi Log4j2漏洞原理 前排提醒:本篇文章基于我另外一篇总结的JNDI注入后写的,建议先看该文章进行简单了解J ...
- 逆向WeChat(七)
上篇介绍了如何通过嗅探MojoIPC抓包小程序的HTTPS数据. 本篇逆向微信客户端本地数据库相关事宜. 本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/184235 ...
- iOS程序内语言切换使用小结
随着时代的发展,应用程序相继出现了不同语言的版本方案,中文,英文,法文,韩文等等:想在应用程序中实现语言的自由切换,需要配置多个语言的文件,根据用户的动态选择获取不同语言文件下的语言文件,从而显示到界 ...
- 分布式缓存 - 缓存服务器 - redis
如果一般的缓存可以解决问题,就不必使用分布式缓存 : 一般使用分布式缓存 都是使用 redis : 使用教程: 1. 安装包 Microsoft.Extensions.Caching.StackExc ...
- 04 Transformer 中的位置编码的 Pytorch 实现
1:10 点赞 16:00 我爱你 你爱我 1401 class PositionalEncoding(nn.Module): def __init__(self, dim, dropout, max ...