`
xcfcky
  • 浏览: 13395 次
  • 性别: 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上就是已经替换了

 

分享到:
评论

相关推荐

    Mybatis与JDBC批量插入MySQL数据库性能测试

    本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database Connectivity)是Java平台中用于与数据库交互的一种规范,它允许程序员使用SQL语句直接操作数据库...

    Mybatis 3+Mysql 实现批量插入

    相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架结合MySQL数据库实现批量插入功能,包括其原理、配置、代码实现以及优化策略。 ### ...

    MySQL批量SQL插入各种性能优化.docx

    MySQL数据库在处理大量数据插入时,性能优化是至关重要的,尤其是在报表系统等需要频繁批量插入数据的应用场景。以下是一些针对MySQL批量SQL插入的性能优化策略: 1. **批量插入数据** - 传统的做法是逐条插入数据...

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

    MySQL批量SQL插入性能优化是数据库管理员和开发人员面临的重要任务,特别是在处理大数据量的系统时。本文将深入探讨几种能够显著提升MySQL InnoDB存储引擎插入性能的方法。 首先,一种有效的优化策略是通过合并多条...

    MYSQL开发性能研究之批量插入数据的优化方法

    综上所述,为了提高MySQL的批量插入性能,可以采取以下策略: 1. 使用自增主键或调整业务逻辑,确保数据按顺序插入。 2. 采用多表值SQL方式,如一次插入10条记录,这通常是最佳实践。 3. 控制线程或连接的数量,保持...

    MySQL批量SQL插入性能优化

    例如,将多条单条插入语句改为一个包含多个值的INSERT语句,可以减少日志生成、网络传输以及SQL解析的次数,从而提升性能。 2. **使用事务进行批量插入**: - 在事务中执行批量插入可以减少单独INSERT操作带来的...

    mysql 批量更新及效率对比

    近期,我们有了大量的 MySQL 批量更新经验,总结了 MySQL 批量更新的几种方法,并进行了性能测试,旨在找到最高效的更新语句写法。 方法一:批量 Update 批量 Update 是最原始的批量更新方法,每条记录执行一次 ...

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

    通过上述策略的组合应用,可以有效提高MySQL的批量插入性能,缩短大数据量导入的时间,提升系统整体效率。在实际应用中,需要根据具体的业务场景和数据库负载进行调整,确保优化措施既提高了性能,又不会对其他并发...

    jdbc批量插入大字段

    因此,"jdbc批量插入大字段"这个话题旨在探讨如何高效地通过Java JDBC来实现Blob字段的批量插入,以提高性能。 首先,我们需要了解JDBC(Java Database Connectivity),它是Java编程语言与各种数据库之间通信的...

    EF批量更新、批量插入、 批量删除使用的是EFUtilities,免费的操作简单,速度超级快

    在.NET开发中,Entity Framework(简称EF)是一个强大的对象关系映射(ORM)框架,它允许开发者使用...通过其简单的API,开发者可以轻松地集成到现有的EF项目中,实现批量插入、更新和删除,从而优化应用程序的性能。

    java 下执行mysql 批量插入的几种方法及用时

    在Java中,执行MySQL批量插入数据有多种方法,每种方法在性能上都有所不同。以下是对这些方法的详细分析: 方法1:单条插入 这是最基础的插入方式,每次循环都创建一个新的SQL语句并执行。这种方法的效率最低,因为...

    odbc 数据库批量插入操作

    在IT领域,尤其是在大数据处理中,批量插入操作是提高效率的关键步骤,尤其当涉及大量数据时,如10万条记录。本话题将深入探讨如何使用ODBC进行数据库的批量插入操作,并与单条更新操作进行对比,展示其性能优势。 ...

    MYSQL批量插入数据的实现代码第1/3页

    ### MySQL批量插入数据的技术解析与实践 #### 一、引言 MySQL作为一款广泛使用的开源关系型数据库管理系统,在处理大量数据的场景下显得尤为重要。批量插入数据是提高数据处理效率的有效手段之一。本文将深入探讨...

    利用poi获取excel数据批量插入大量数据到mysql

    本教程将详述如何使用Apache POI库读取Excel数据,并通过Java的JDBC接口批量插入到MySQL数据库中。Apache POI是Java平台上的一个开源项目,它允许程序员创建、修改和显示Microsoft Office格式的文件,其中包括Excel...

    JDBC连接MySQL数据库批量插入数据过程详解

    PreparedStatement是JDBC API中的一种预处理语句,它能够提高批量插入数据的效率。 四、JDBC连接MySQL数据库批量插入数据的步骤 1. 注册驱动:使用Class.forName()方法注册MySQL驱动。 2. 获取连接:使用...

    c#实现几种数据库的大数据批量插入

    在C#中,进行大数据批量插入到不同的数据库如SQL Server、Oracle、SQLite和MySQL是常见的需求,这可以显著提高数据处理效率。以下将详细介绍如何在这些数据库中实现批量插入。 首先,我们关注C#中一个关键接口`...

    jdbc-批量插入数据

    本文将深入探讨如何使用JDBC进行批量插入数据,这在处理大量数据时能显著提高性能。 批量插入数据是数据库操作中常见的一种优化策略,特别是在数据分析、数据迁移或大数据处理等场景。传统的单条插入方式可能会导致...

    C#.NET中如何批量插入大量数据到数据库中

    在C#.NET中批量插入大量数据到数据库是一个常见的任务,特别是在...通过这些方法,可以有效地提高C#.NET中批量插入大量数据到数据库的性能。同时,确保在处理大量数据时注意异常处理和数据验证,以防止数据丢失或错误。

Global site tag (gtag.js) - Google Analytics