JDBC插入性能优化对比
今天对Insert进行了性能测试,结果反差很大,平时都是单条插入,虽然性能要求没有那么高,但是突然在项目中,人家给定时间内完成,这就尴尬了.
优化数据库,优化服务器,优化代码,反正通过各种优化提高数据的处理速度.
接下来对jdbc插入做一个测试,测试代码入如下:
/**
* 生成插入语句
* @author fgq 2017年12月26日 下午6:40:03
* @return
*/
public static List<String> getInsertSql(){
String sqlModel = "insert into test_cost1(id,name)values('{id}','{name}')";
List<String> insertSqls = new ArrayList<String>();
for(int i=0;i<10000;i++){
sqlModel = sqlModel.replace("{id}", UUIDUtil.getRandomUUID());
sqlModel = sqlModel.replace("{name}", "danny");
insertSqls.add(sqlModel);
}
return insertSqls;
}
/**
* Statement单条插入
* @author fgq 2017年12月26日 下午6:39:05
* @param conn
* @throws Exception
*/
public static void executeSQL(Connection conn) throws Exception {
List<String> insertSql = getInsertSql();
Statement stmt = conn.createStatement();
for(String sql : insertSql){
stmt.execute(sql);
}
} /**
* Statement批量插入
* @author fgq 2017年12月26日 下午6:39:24
* @param conn
* @throws Exception
*/
public static void executeBatchSQL(Connection conn) throws Exception {
List<String> insertSql = getInsertSql();
Statement stmt = conn.createStatement();
for(String sql : insertSql){
stmt.addBatch(sql);
}
stmt.executeBatch();
}
/**
* PreparedStatement批量插入
* @author fgq 2017年12月26日 下午6:40:34
* @param conn
* @throws Exception
*/
public static void batchInsertData(Connection conn) throws Exception{
String prefix = "insert into test_cost1(id,name)values(?,?)";
PreparedStatement pst = conn.prepareStatement(prefix);
for(int j = 0;j<10000;j++){
pst.setString(1, UUIDUtil.getRandomUUID());
pst.setString(2, "liming");
pst.addBatch();
}
pst.executeBatch();
} /**
* PreparedStatement单条插入
* @author fgq 2017年12月26日 下午6:40:16
* @param conn
* @throws Exception
*/
public static void insertData(Connection conn) throws Exception{
String prefix = "insert into test_cost1(id,name)values(?,?)";
PreparedStatement pst = conn.prepareStatement(prefix);
for(int j = 0;j<10000;j++){
pst.setString(1, UUIDUtil.getRandomUUID());
pst.setString(2, "liming");
pst.executeUpdate();
}
}
public static void main(String[] args) throws Exception {
final String url = "jdbc:oracle:thin:@123.123.123.123:1521/orcl";
final String name = "oracle.jdbc.driver.OracleDriver";
final String user = "test";
final String password = "test";
Connection conn = null;
Class.forName(name);//指定连接类型
conn = DriverManager.getConnection(url, user, password);//获取连接
if (conn!=null) {
System.out.println("获取连接成功");
long startTime = System.currentTimeMillis();
insertData(conn);
System.out.println("执行1000插入耗时:"+(System.currentTimeMillis() - startTime));
}else {
System.out.println("获取连接失败");
}
}
通过上面10000条测试结果,发现效率最高的是
batchInsertData
最慢的是
insertData
所以在进行第三方库的插入,最好选择效率最高的,而且在批量执行的时候,最好不要有数据冲突,否则执行失败,所以与业务无关的主键很重要.
JDBC插入性能优化对比的更多相关文章
- 大数据应用之HBase数据插入性能优化实测教程
引言: 大家在使用HBase的过程中,总是面临性能优化的问题,本文从HBase客户端参数设置的角度,研究HBase客户端数据批量插入性能优化的问题.事实胜于雄辩,数据比理论更有说服力,基于此,作者设计 ...
- MySQL插入性能优化
目录 MySQL插入性能优化 代码优化 values 多个 一个事务 插入字段尽量少,尽量用默认值 关闭 unique_checks bulk_insert_buffer_size 配置优化 inno ...
- MySQL批量SQL插入性能优化
对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的. ...
- MySQL插入性能优化(转)
原文:http://tech.uc.cn/?p=634 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时 ...
- 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例
一.引言: 上篇文章提起关于HBase插入性能优化设计到的五个参数,从参数配置的角度给大家提供了一个性能测试环境的实验代码.根据网友的反馈,基于单线程的模式实现的数据插入毕竟有限.通过个人实测,在我的 ...
- laravel 5.1 性能优化对比 - 框架提供的方法
写了一个项目发现性能不如人意. 于是便测试下, 看下性能瓶颈在什么地方. 使用 ab -n 20 http://www.lartest.com/ 软件环境: OS : windows 8.1 CPU: ...
- Flask性能优化对比
基于Flask的网关:Flask,Uwsgi,Gevent,Gunicorn(gevent),Tornado,Twisted !/usr/bin/python -- coding:utf-8 -- 美 ...
- Android Sqlite 批量插入性能优化
db.beginTransaction(); try { for (...) { db.execSQL("...", new Object[]{}); } db.setTransa ...
- 【转】MySQL批量SQL插入各种性能优化
原文:http://mp.weixin.qq.com/s?__biz=MzA5MzY4NTQwMA==&mid=403182899&idx=1&sn=74edf28b0bd29 ...
随机推荐
- 微信支付 超时 mysql.event
$wtime 使用具体timestamp //rand 防推测 $wev = 'ev_gbuy_create_' . trim($winsert_id) . rand(100, 999); $sql ...
- 一篇搞定vue请求和跨域
vue本身不支持发送AJAX请求,需要使用vue-resource.axios等插件实现 axios是一个基本Promise的HTTP请求客户端,用来发送请求,也是vue2.0官方推荐的,同时不再对v ...
- python基础之类和对象、对象之间的交互、类名称空间与对象/实例名称空间
一 面向对象初识 Python要么是面向过程要么是面向对象. 概念及优缺点: 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东 ...
- Compilation failed: internal java compiler error
在Idea中编译时出现这个错误:Error:java: Compilation failed: internal java compiler error. Information:Using java ...
- DB2中编目本机其中数据库的方法
问题:同一节点上有两个实例.假设想在当中一个实例下訪问还有一个实例中的数据库,有两种方法: 1. 使用catalog local node的方式,在当中一个实例中将另外一个实例直接编目,这样的方试中, ...
- phpcms 列表页中,如何调用其下的所有子栏目?
{pc:content action="category" catid="$catid" num="99" order="list ...
- HDU1165: Eddy's research II(递推)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1165 果断不擅长找规律啊,做这种题静不下心来. Ackermann function can be def ...
- 吴超老师课程--Hive的执行语句
为什么选择Hive? (1)基于Hadoop的大数据的计算/扩展能力(2)支持SQL like查询语言(3)统一的元数据管理(4)简单编程 一:Hive的数据类型(1)基本数据类型tinyint/sm ...
- C#实现对图片文件的压缩、裁剪操作实例
本文实例讲述了C#对图片文件的压缩.裁剪操作方法,在C#项目开发中非常有实用价值.分享给大家供大家参考.具体如下: 一般在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便 ...
- go——工程结构
Go是一门推崇软件工程理念的编程语言,它为开发周期的每个环节都提供了完备的工具和支持. Go语言高度强调代码和项目的规范和统一,这几种体现在工程结构或者说代码体制的细节之处. 1.工作区 一般情况下, ...