`
xcfcky
  • 浏览: 12809 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Mysql批量插入提高性能

 
阅读更多

 

通过使用addBatch()和executeBatch()这一对方法可以实现批量处理数据。

手动打开mysql批量插入的开关,性能才能表现出来,大家试试就知道啦。。

加上“?useServerPrepStmts=false&rewriteBatchedStatements=true

 

package com.xcfcky.demo;


import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DbStoreHelper {  
	  
    private String insert_sql;  
    private String charset;  
    private boolean debug;  
  
    private String connectStr;  
    private String username;  
    private String password;  
  
    public DbStoreHelper() {  
        connectStr = "jdbc:mysql://localhost:3306/db_ip";  
         connectStr += "?useServerPrepStmts=false&rewriteBatchedStatements=true";  
        insert_sql = "INSERT INTO tb_ipinfos (iplong1,iplong2,ipstr1,ipstr2,ipdesc) VALUES (?,?,?,?,?)";  
        charset = "gbk";  
        debug = true;  
        username = "root";  
        password = "****";  
    }  
  
    private void doStore() throws ClassNotFoundException, SQLException, IOException {  
        Class.forName("com.mysql.jdbc.Driver");  
        Connection conn = DriverManager.getConnection(connectStr, username,password);  
        conn.setAutoCommit(false); // 设置手动提交  
        PreparedStatement psts = conn.prepareStatement(insert_sql);  
        String line = null; 
        
        //开始执行时间
        long begin = System.currentTimeMillis();
        
        for(int i=0; i<500000; i++){
          psts.setInt(1, i);
          psts.setInt(2, i);  
          psts.setString(3, i + "ipstr1");  
          psts.setString(4, i + "ipstr2");  
          psts.setString(5, i + "ipstr3");  
          psts.addBatch();          // 加入批量处理  
        }

        psts.executeBatch(); // 执行批量处理  
        conn.commit();  // 提交  
        
        System.out.println("共用去时间" + (System.currentTimeMillis() - begin));
        conn.close();  
    }  
    
    
    public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException{
    	DbStoreHelper dbsh = new DbStoreHelper();
    	dbsh.doStore();
    }
}  


插入50万条数据只需要14秒,性能明显提高

在MySQL JDBC连接字符串中还可以加入参数,
rewriteBatchedStatements=truemysql默认关闭了batch处理,通过此参数进行打开,这个参数可以重写向数据库提交的SQL语句,具体参见:http://www.cnblogs.com/chenjianjx/archive/2012/08/14/2637914.html
useServerPrepStmts=false如果不开启(useServerPrepStmts=false),使用com.mysql.jdbc.PreparedStatement进行本地SQL拼装,最后送到db上就是已经替换了

 

分享到:
评论

相关推荐

    MySQL批量SQL插入性能优化详解

    经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考。 1. 一条SQL语句插入多条数据。 常用的插入语句如: INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) ...

    MySQL实现批量插入以优化性能的教程

    经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考。 1. 一条SQL语句插入多条数据。 常用的插入语句如:   INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `...

    MySQL批量SQL插入性能优化

     经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考。  1. 一条SQL语句插入多条数据。  常用的插入语句如:  INSERT INTO `insert_table` (`datetime`, `uid`, `...

    Node.js下向MySQL数据库插入批量数据的方法

    项目(nodejs)中需要一次性插入多笔数据到数据库,数据库是mysql的,由于循环插入的性能太差,就像使用批量插入的方法提高数据的插入性能。 批量插入的数据库的表结构如下: 1.数据库连接 var mysql = require('...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    1.1.14 innodb使用多个回滚段提升性能 26 1.1.15 改善清除程序进度 26 .1.1.16 添加删除缓冲和清除缓冲 27 1.1.17 控制自旋锁spin lock轮训间隔 28 1.1.18 快速创建、删除、更改索引 29 1.1.19 innodb支持创建...

    gorm-b​​ulk-insert:使用gorm实现BulkInsert,只需传递一个Slice的结构即可。 简单兼容

    当在数据库中保存大量记录时,一次插入-而不是一个接一个地插入-可以显着提高性能。 这被广泛称为批量插入。 Gorm是最受欢迎的ORM之一,包含对开发人员非常友好的功能,但未提供批量插入。 该库旨在解决批量插入...

    MySQL性能优化详解.docx

    使用批量操作:对于大量数据的插入、更新或删除,使用批量操作可以减少I/O次数,提高效率。 监控和分析慢查询:开启慢查询日志,使用mysqldumpslow命令分析慢查询,找出并优化执行时间较长的SQL语句。 调整MySQL配置...

    EntityFramework-Extensions:实体框架批量操作通过批量保存更改,插入,更新,删除和合并SQL Server,SQL Azure,SQL Compact,MySQL和SQLite来提高实体框架的性能

    批量插入 批量更新 批量删除 批量合并 DeleteFromQuery UpdateFromQuery var context = new CustomerContext (); // ... context code ... // Easy to use context . BulkSaveChanges (); // Easy to customize ...

    批量操作:C#SQL批量操作用于SQL Server,SQL Azure,SQL Compact,MySQL和SQLite的高性能C#批量插入,更新,删除和合并

    提高SQL的插入,更新,删除和合并性能,并克服SqlBulkCopy的限制稽核区分大小写实体数据源/ Lambda映射产值和更多...可扩展SQL Server-基准运作方式1,000行10,000行100,000行1,000,000行插6毫秒25毫秒200毫秒2,000...

    [译] MySQL 最佳实践 —— 高效插入数据

    当你需要在 MySQL 数据库中批量插入数百万条数据时,你就会意识到,逐条发送 INSERT 语句并不是一个可行的方法。 MySQL 文档中有些值得一读的 INSERT 优化技巧。 在这篇文章里,我将概述高效加载数据到 MySQL 数据库...

    mysql数据库my.cnf配置文件

    # 批量插入缓存大小, 这个参数是针对MyISAM存储引擎来说的。适用于在一次性插入100-1000+条记录时, 提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。 myisam_sort_buffer_size = 1024M # MyISAM设置恢复表...

    2024java连接mysql数据库的jar包.zip

    同时,它还支持连接池技术,能够有效地管理数据库连接,提高系统的性能和稳定性。 除了基本的数据库操作外,这个jar包还提供了丰富的功能扩展,包括事务管理、批量操作、数据类型映射、结果集处理等,使得开发人员...

    精迅CMS v1.0 GBK PHP MYSQL 开源版.rar

     整个系统内容都可以生成静态HTML,有效的提高了系统的性能,不仅减轻服务器的负载提高搜索收录率,增加网站收录。  支持6种html目录存放方式,您可以随心所欲的设置要生成的扩展名,一切更可能的根据您的喜好DIY...

    精迅CMS v1.0 UTF8 PHP MYSQL 开源版.rar

     整个系统内容都可以生成静态HTML,有效的提高了系统的性能,不仅减轻服务器的负载提高搜索收录率,增加网站收录。  支持6种html目录存放方式,您可以随心所欲的设置要生成的扩展名,一切更可能的根据您的喜好DIY...

    CrossPHP 1.6.1 虚拟主机版

    二,Cross\DB\SQLAssembler批量插入时自动转换格式;三,REST新增对HEAD,PATCH,OPTIONS的支持;四,其他优化。附加参数的处理从Cross\Core\Application移动到Cross\Core\Router中处理;注释配置相关方法命名规范,做到...

    SQL培训第一期

    2.1.3.1 查询结果批量插入 insert into tablea(cola,colb) select cola,colb from tableb; 2.1.3.2 创建相同的表结构并插入数据(备份表数据) create tab_new as select * from tab_old; 2.1.3.3 创建相同的表结构...

    买车网整站源码 v12.rar

     整个系统内容都可以生成静态HTML,有效的提高了系统的性能,不仅减轻服务器的负载提高搜索收录率,增加网站收录。  支持多种html目录存放方式,您可以随心所欲的设置要生成的扩展名,一切更可能的根据您的喜好DIY...

Global site tag (gtag.js) - Google Analytics