JDBC批量操作性能提升
JDBC
当使用INSERT INTO....VALUES()语句批量插入的时候,应该使用JDBC的PreparedStatement的批量操作方法,而不是採用一条一条运行的方法。
比如(来源:http://superjavason.iteye.com/blog/255423):

如上图,代码有3个关键的处理步骤:
1)关闭自己主动提交
2)addBatch
3)executeBatch
使用这样的方法,SQLite測试时的效果提升很明显,从 10000/s提升到100000/s(数据仅做參考,不能作为决策根据)
须要注意的是:这样的方式仅仅适合同样结构的SQL语句批量运行。对于不同结构的SQL语句不能用这样的方式,由于PreparedStatement在初始化的时候要指定sql
MySQL
使用上述參数后,MySQL的性能也有一定的提升。但提升不明显。经过查找,确认和例如以下两个參数有关:
- rewriteBatchedStatements=true
mysql默认关闭了batch处理, 通过此參数进行打开。 这个參数能够重写向 数据库提交的SQL语句
- useServerPrepStmts=false
假设不开启(useServerPrepStmts=false)。 使用com.mysql.jdbc.PreparedStatement进行本地SQL拼装, 最后送到db上就是已经替换了?
后的终于SQL
经过測试。打开这2个參数后,mysql的批处理性能从1000多提升到50000多
JDBC批量操作性能提升的更多相关文章
- 三种JDBC批量插入编程方法的比较
JDBC批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下的等. 我用Mysql 5.1.5的JDBC driver 分别对三种比较常用的方法做了测试 方法一,使用PreparedStat ...
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1 背景 系统中需要批量生成单据数据到数据库表,所以采用 ...
- [JDBC] 实用性能提升
在Java以及JavaWeb中,应用的性能是很重要的.尤其是数据库后端对应用的性能影响. 一.使用缓存 性能问题大多数情况下罪魁祸首是访问数据库的那些代码.因为连接到数据库需要准备好连接(connec ...
- JDBC批量Insert深度优化(有事务)
环境: MySQL 5.1 RedHat Linux AS 5 JavaSE 1.5 DbConnectionBroker 微型数据库连接池 测试的方案: 执行10万次Insert语句,使用不同方 ...
- jdbc批量插入
分享牛,分享牛原创.有这样一个需求,文本文件中的数据批量的插入mysql,怎么用jdbc方式批量插入呢? jdbc默认提供了批量插入的方法,可能用一次就忘记了,这里做笔记记录一下jdbc批量插入吧. ...
- JDBC批量执行executeBatch
JDBC事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态.为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这 ...
- JDBC批量插入数据优化,使用addBatch和executeBatch
JDBC批量插入数据优化,使用addBatch和executeBatch SQL的批量插入的问题,如果来个for循环,执行上万次,肯定会很慢,那么,如何去优化呢? 解决方案:用 preparedSta ...
- JAVA 使用原生jdbc批量添加,表被锁住问题
今天用jdbc批量添加数据的时候遇到了一个问题,当数据添加成功过后,再想对该表进行操作发现表被锁住了,检查了下代码发现事务提交了呀!!!!!!!!!!!! 去网上查了大半天的资料才发现问题,在conn ...
- [JDBC]批量提交插入语句以提高数据插入速度(效率提升不明显)
// Initialize conn&stmt Connection conn=null; Statement stmt=null; ... conn=dataSource.getConnec ...
随机推荐
- SchemaExport
不在xml中配置 <!-- Drop and re-create the database schema on startup <property name ...
- 编译ORBSLAM2 build_ros.sh,实现kinect2在ROS环境下运行ORBSLAM2
//編譯ORBSLAM2 build_ros.sh參考:“http://www.cnblogs.com/bigzhao/p/6635770.html”1.source ~/.bashrc出現問題:ct ...
- 【转】打造自己的视频会议系统 GGMeeting(附送源码)
原文地址:http://www.cnblogs.com/justnow/p/4487201.html 自从在博客园发布开源即时通信系统GG(QQ高仿版)以来,结识了很多做IM的朋友,然后我和我的伙伴们 ...
- MongoDB Database Profiler
数据库profiler细粒度收集mongodb的写操作.游标.数据库命令等.可以在数据库级别或者实例级别开启profiling. profiler将收集到的数据写入system.profile集合中. ...
- base、this、new、override、abstract、virtual、static
前言 本文主要来讲解一下C#中,自己觉得掌握的不怎么样或者用的不多,不太熟悉的关键字,主要包括base.this.new.override.abstract.virtual以及针对static字段和s ...
- sklearn基本回归方法
https://blog.csdn.net/u010900574/article/details/52666291 博主总结和很好,方法很实用. python一些依赖库: https://www.lf ...
- RCU
RCU(read-copy-update)同步机制.R(Read):读者不需要获得任何锁就可访问RCU保护的临界区:C(Copy):写者在访问临界区时,写者“自己”将先拷贝一个临界区副本,然后对副本进 ...
- windows编译tensorflow c++库
1. 准备 windows 10系统.3.6GHz cpu.16G 内存 visual studio 2017 or 2015 下载安装git 下载安装cmake 下载安装swigwin 如果不需要p ...
- jquery实现页面的搜索功能
$(function(){ $("input[type=button]").click(function(){ var txt=$("input[type=text]&q ...
- oracle中exists 和 in 的区别
1)用IN select * from A where id in(select id from B); 以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.注意,是缓存 ...