今天对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. FW qunit introduction

    自动化测试软件对于开发来说是一个很重要的工具,而单元测试对于自动化测试来说是基本组成部分:软件的每一个组件或者单元可以在非人工介入的情况下,使用测试工具一遍遍的重复执行.换句话说,就是你可以写一次测试 ...

  2. Hibernate 中一对多和多对多映射

    1. 一对多映射 1.1 JavaWeb 一对多建表原则 多方表的外键指向一方表的主键; 1.2 编写一对多的 JavaBean // 客户(一方)和联系人(多方) // 客户(一方) JavaBea ...

  3. Qt 打印机支持模块

    Qt 打印支持 Qt为打印提供广泛的跨平台支持.使用每个平台上的打印系统,Qt应用程序可以打印到连接的打印机,并通过网络打印到远程打印机.Qt的打印系统还支持PDF文件生成,为基本的报告生成设施奠定了 ...

  4. tpot蜜罐平台搭建

    iso安装:https://github.com/dtag-dev-sec/tpotce autoinstaller安装:https://github.com/dtag-dev-sec/tpotce ...

  5. 我的Android进阶之旅】GitHub 上排名前 100 的 Android 开源库进行简单的介绍

    GitHub Android Libraries Top 100 简介 本文转载于:https://github.com/Freelander/Android_Data/blob/master/And ...

  6. Java并发—java.util.concurrent.locks包

    一.synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性.那么为什么会出现Lock呢? 如果一个代码块被synchronized修饰了,当 ...

  7. window7+wamp环境配置Oracle数据库连接

    最近开发需要使用的oracle数据库!翻看了PHP手册,也在网上找了些帖子!功夫不负有心人,花费了四五个小时的时间,终于找到了Oracle的配置方法.下面就讲解下如何配置Oracle数据库连接吧! 附 ...

  8. MTK平台环境搭建---Ubuntu Linux 下执行sudo apt-get install提示“现在没有可用的软件包……

    问题描述: sudo apt-get install openssh-server 正在读取软件包列表... 完成正在分析软件包的依赖关系树 Reading state information... ...

  9. 判断元素的16中方法expected_conditions

    from selenium.webdriver.support import expected_conditons as EC 1.title_is:判断当前页面的title是否完全等于预期字符串,返 ...

  10. laravel command命令行

    生成类 为了创建一个新命令,你可以使用Artisan中的 command:make 命令生成一个骨架作为你的起点: 生成一个命令类 php artisan command:make FooComman ...