[JDBC] 实用性能提升
在Java以及JavaWeb中,应用的性能是很重要的。尤其是数据库后端对应用的性能影响。
一、使用缓存
性能问题大多数情况下罪魁祸首是访问数据库的那些代码。因为连接到数据库需要准备好连接(connection),还有往返的网络传输和数据库系统后端的处理。如果你可以把数据缓存下来的话这是减少数据库调用的最好方式,即时你的应用有完全动态传输的数据,短暂的缓存可以节省很大的数据库往返调用,如果想找出数据库调用,那么仅仅把DAO层的每个db调用中记录到日志中就行,如果记录好每个线程进入和退出数据库访问的时间更好,他能告诉你一个调用究竟花了多少时间。
二、使用数据库索引
检查数据库列上(column)是否有索引,如果你正做查询发现所花的时间比预想的时间要长,那么首先想到的是检查在列上(正在查询的where子句中的那列)是否做了索引。程序员中常犯这个错误,有索引和没有索引在做查询时有巨大的差异。这条贴士在性能上至少能提速100%,当然合适的索引更重要,太多的索引反而会减慢数据的插入和跟新操作。因此使用索引的时候要小心,像ID、类别、类等字段上做索引是经常使用的。
三、使用PreparedStatement
使用PreparedStatement或者存储过程(Stored Procedure)执行查询时PreparedStatement比普通的Statement对象要快。因为数据库可以对查询语句做预处理和查询缓存计划。因此总是使用 ** 参数化形式的预处理语句 ** 如SELECT * FROM table WHERE id=?,而不使用SELECT * FROM table WHERE id=' "+id" ' ,虽然后者仍是一个预处理语句但不是参数化的。使用第二种查询方式在性能上没有任何优势。
四、使用数据库连接池
连接池用来存放数据库连接(Connection)创建数据库连接是个比较慢的过程而且会耗很长时间,所以如果每个请求都要创建一个连接,那么显然响应时间将会更长。用连接池根据上游的流量及并发请求数创建连接、缓存连接会比较慢,但总体还能减少不少开销。
五、使用JDBC批量更新
使用JDBC批量更新操作能显著提升Java数据库应用的性能。你应该始终使用批量处理来执行插入和跟新操作。通过使用Statement或者PreparedStatement做批量查询。使用executeBatch()方法做批量查询。
六、取消自动提交
查询时设置setAutoCommit(false),默认JDBC连接自动提交模式是打开的,意味着每个独立的SQL语句都将在自己的事务中执行。然而你可以把SQL语句按组归到一个逻辑事务中去,这样通过调用commit()或rollback()要么提交要么回滚。试着运行相同数量的查询次数对比一下使用自动提交和不使用自动提交时的性能区别差异性。
[JDBC] 实用性能提升的更多相关文章
- 揭秘Sql2014新特性-tempdb性能提升
一直以来,在高负载,复杂的生产环境中,tempdb的压力是成为整个实例瓶颈的重要因素之一.微软的工程师们也在各个版本中不断优化它的使用.到了Sql Server2014又有了新的特性使其性能得temp ...
- paip.slap工具与于64位win7与JDBC的性能对比
paip.slap工具与于64位win7与JDBC的性能对比 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...
- oracle网络服务之beq协议和SDU优化(性能提升可达30%)
oracle网络服务之beq协议和SDU优化(性能提升可达30%) 12.3.1 BEQ协议 如果Oracle数据库服务端和客户端在同一台机器上,可以使用BEQ连接,BEQ连接采用进程间直接通信,不 ...
- 初探性能优化——2个月到4小时的性能提升(copy)推荐阅读
一直不知道性能优化都要做些什么,从哪方面思考,直到最近接手了一个公司的小项目,可谓麻雀虽小五脏俱全.让我这个编程小白学到了很多性能优化的知识,或者说一些思考方式.真的感受到任何一点效率的损失放大一定倍 ...
- SQL Server 2014里的性能提升
在这篇文章里我想小结下SQL Server 2014引入各种惊艳性能提升!! 缓存池扩展(Buffer Pool Extensions) 缓存池扩展的想法非常简单:把页文件存储在非常快的存储上,例如S ...
- mapreduce性能提升2
mapreduce性能提升2mapreduce性能提升2mapreduce性能提升2
- YbSoftwareFactory 代码生成插件【二十一】:Web Api及MVC性能提升的几个小技巧
最近在进行 YbSoftwareFactory 的流程功能升级,目前已经基本完成,现将用到的一些关于 Web Api 及 MVC 性能提升的一些小技巧进行了总结,这些技巧在使用.配置上也相当的简单,但 ...
- 在PYTHON中使用StringIO的性能提升实测(更新list-join对比)
刚开始学习PYTHON,感觉到这个语言真的是很好用,可以快速完成功能实现. 最近试着用它完成工作中的一个任务:在Linux服务器中完成对.xml.gz文件的解析,生成.csv文件,以供SqlServe ...
- paip.cache 缓存架构以及性能提升总结
paip.cache 缓存架构以及性能提升总结 1 缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...
随机推荐
- js中关于数组处理的一些小技巧
1 reduce方法同时实现map和filter 假设现在有一个数组,然后遍历它的每一项(map的功能)然后筛选出其中的一部分(filter的功能).如果使用map和filter的话,我们需要遍历这个 ...
- pytest--fixture参数化的实现方式和执行顺序
之前看到fixture函数可以通过添加,params参数来实现参数化,后续看到了悠悠 的博客,可以通过@pytest.mark.parametrize来实现,现在做一个总结 实现方式一 通过param ...
- Js拾忆
instanceof运算符:他是判断一个构造函数的prototype是否在对象的原型链上查找到 var a = new Array(); console.log(a instanceof Array) ...
- vue dialog在ios层级有问题
:modal-append-to-body="false" 遮罩层是否插入至 body 元素上,若为 false,则遮罩层会插入至 Dialog 的父元素上
- 【XAF问题】多个属性验证RuleUniqueValue
一.问题 1. 在XAF中如何验证多个属性唯一值? 二.解决方法 使用RuleCombinationOfPropertiesIsUnique [RuleCombinationOfPropertiesI ...
- 大数据分析-excel常用技巧
在用EXCEL制表时,经常要要用到填充,比如1到100行内容相同或引用公式,大多数人会用鼠标拖来拖去,例如: 在第一行的A1单元格右下方 鼠标指针 变 实心黑十字 向下拉或向右,向左拉 我想拉100行 ...
- Tensorflow 报错:tensorflow.python.framework.errors_impl.InternalError: Failed to create session.
问题描述 IDE:pycharm,环境中安装tensorflow-gpu 1.8.0 ,Cuda9 ,cudnn 7,等,运行代码 报错如下 tensorflow.python.framework.e ...
- chrome浏览器模拟手机端:jquery click()点击无效解决方法
$(".sku-wrap .ok").click(); chrome浏览器模拟手机端,在油猴插件中写JS代码,然后发现click()点击失效. 解决方法:jquery的click( ...
- C#使用RSA证书文件加密和解密
public class EncrypHelp { static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKey ...
- idea函数被调用
打开一个复杂的程序或者项目进行分析的时候,我们就需要知道一个方法在哪里被调用,用于迅速厘清代码逻辑.操作如下:选中函数,右键,点击Find Usages. 如图: 操作简单,但右键还是没有快捷键方便. ...