今天对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插入性能优化对比的更多相关文章

  1. 大数据应用之HBase数据插入性能优化实测教程

    引言: 大家在使用HBase的过程中,总是面临性能优化的问题,本文从HBase客户端参数设置的角度,研究HBase客户端数据批量插入性能优化的问题.事实胜于雄辩,数据比理论更有说服力,基于此,作者设计 ...

  2. MySQL插入性能优化

    目录 MySQL插入性能优化 代码优化 values 多个 一个事务 插入字段尽量少,尽量用默认值 关闭 unique_checks bulk_insert_buffer_size 配置优化 inno ...

  3. MySQL批量SQL插入性能优化

    对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的. ...

  4. MySQL插入性能优化(转)

    原文:http://tech.uc.cn/?p=634 对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时 ...

  5. 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例

    一.引言: 上篇文章提起关于HBase插入性能优化设计到的五个参数,从参数配置的角度给大家提供了一个性能测试环境的实验代码.根据网友的反馈,基于单线程的模式实现的数据插入毕竟有限.通过个人实测,在我的 ...

  6. laravel 5.1 性能优化对比 - 框架提供的方法

    写了一个项目发现性能不如人意. 于是便测试下, 看下性能瓶颈在什么地方. 使用 ab -n 20 http://www.lartest.com/ 软件环境: OS : windows 8.1 CPU: ...

  7. Flask性能优化对比

    基于Flask的网关:Flask,Uwsgi,Gevent,Gunicorn(gevent),Tornado,Twisted !/usr/bin/python -- coding:utf-8 -- 美 ...

  8. Android Sqlite 批量插入性能优化

    db.beginTransaction(); try { for (...) { db.execSQL("...", new Object[]{}); } db.setTransa ...

  9. 【转】MySQL批量SQL插入各种性能优化

    原文:http://mp.weixin.qq.com/s?__biz=MzA5MzY4NTQwMA==&mid=403182899&idx=1&sn=74edf28b0bd29 ...

随机推荐

  1. 巨蟒python全栈开发flask4

    1.偏函数 2.ThreadingLocal线程安全 空间换取时间 3.LocalStack 4.RunFlask+request 5.请求上文 6.请求下文

  2. runtime(二)

    前言 上一篇中我们大致的了解了runtime的一些基本概念,这一篇我们一起来看看如何使用它. 3.如何使用runtime. 3.1 方法交换 举一个老生常谈的例子.当你接手一个新的项目,需要查看这个程 ...

  3. 接口测试工具 — jmeter(关联)

    1.正则表达式 1)添加正则表达式提取器 2)提取关联词 3)填写正则表达式 4)使用关联,其他请求使用${sign2}代替变量值 2. 1)添加提取器 2)填写变量值 3)使用关联,其他请求使用${ ...

  4. python的socket的学习

    一.Socket相关知识 1.socket是什么: socket是应用层与TCP/IP协议族通信的中间软件抽象层,他是一组接口.在设计模式中,Socket其实就是一个门面模式. 它把复杂的TCP/IP ...

  5. Linux(1)- 服务器核心知识、Linux入门、VMware与centeos安装、远程连接linux、linux基本命令使用

    一.服务器核心知识 1.电脑和电脑的硬件组成 现在的人们几乎无时无刻不在使用着电脑!不管是桌上型电脑(桌机).笔记型电脑(笔电).平板电脑,还是智慧型手机等等,这些东西都算是电脑.虽然接触这么多,但是 ...

  6. UTF-8具体解释

    UTF-8是一种变长字节的编码方式.它以8位(1字节)为单位对Unicode进行编码. UTF-8理论上最多能够达到6字节长.但眼下全世界的字符仅仅须要4字节就能够表示完. UTF-8规定,对于某一字 ...

  7. 新手入门:java文件转成jar包再转成exe文件——图文教程

    [本文简介] 由于课程设计的原因,研究着如何把java 程序转成exe,最终成功了,现在把过程记录分享一下. 本文将介绍如何把一个跑在eclipse的java应用,导出成jar文件,再变成exe可执行 ...

  8. HBA 卡和RAID 卡

    HBA卡: 只从HBA的英文解释HOST BUS ADAPTER(主机总线适配器)就能看出来,他肯定是给主机用的,一般HBA就是给主机插上后,给主机扩展出更多的接口,来连接外部的设备.大多数讲到HBA ...

  9. HadoopHA简述

    1 概述 在hadoop2.0之前,namenode只有一个,存在单点问题(虽然hadoop1.0有 secondarynamenode,checkpointnode,buckcupnode这些,但是 ...

  10. beego——多种格式的数据输出

    beego当初设计的时候就考虑了API功能的设计,而我们在设计API的时候经常是输出JSON或者XML数据,那么beego提供了这样的方式直接输出: 1.JSON格式输出 func (this *Ad ...