mysql数据库批量高速插入

近期在处理一批数据,须要从库中表里的字段进行处理然后导出到一个新表中。只是这个表的数据量有近500w条。

这数据量出现的的问题是须要处理的时间好长。

首先想到,一句一句的插入,大数据量处理时间好长,忽略。

其次想到,多线程插入,想到数据库连接是须要同步的所以感觉用处不大。

最后想到,使用 PreparedStatement 预编译sql 进行批量插入 batch 处理。

好吧。如今就进行批处理插入測试。

1、使用简单的 batch

public static void main(String[] args) {
        Connection conn = getConn(lsqlurl, luser, lpassword);
        long startTime = System.currentTimeMillis();
        try {
            PreparedStatement pst = conn.prepareStatement("insert into testmy (id,name,age) values (?

,?,?



)");
            for (int i = 0; i < 2000; i++) {
                pst.setInt(1, 3);
                pst.setString(2, "xx");
                pst.setInt(3, 10);
                pst.addBatch();
            }
            pst.executeBatch();
            long endTime = System.currentTimeMillis();
            System.out.println((endTime - startTime)/1000+"s");
            System.out.println("test sql batch--->2000.....");
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

你会发现时间会是30s 左右。

2k行的数据插入就30秒 。

2w行数据插入时间为940秒(约16min)。

2、改动自己主动提交的 batch

public static void main(String[] args) {
        Connection conn = getConn(lsqlurl, luser, lpassword);
        long startTime = System.nanoTime();
        try {
            conn.setAutoCommit(false);
            PreparedStatement pst = conn.prepareStatement("insert into test (id,name,age) values (?,?,?

)");
            for (int i = 0; i < 2000; i++) {
                pst.setInt(1, 3);
                pst.setString(2, "xx");
                pst.setInt(3, 10);
                pst.addBatch();
            }
            pst.executeBatch();
            conn.commit();
            long endTime = System.nanoTime();
            System.out.println((endTime - startTime)/1000000+"ms");
            System.out.println("test sql batch--->2000.....");
        } catch (SQLException e) {
             try {
                conn.rollback();

时间: 2024-11-05 16:25:05

mysql数据库批量高速插入的相关文章

mysql数据库批量快速插入

最近在处理一批数据,需要从库中表里的字段进行处理然后导出到一个新表中.不过这个表的数据量有近500w条.这数据量出现的的问题是需要处理的时间好长. 首先想到,一句一句的插入,大数据量处理时间好长,忽略. 其次想到,多线程插入,想到数据库连接是需要同步的所以感觉用处不大. 最后想到,使用 PreparedStatement 预编译sql 进行批量插入 batch 处理. 好吧,现在就进行批处理插入测试. 1.使用简单的 batch public static void main(String[]

mySQl数据库中不能插入中文的处理办法

1. 修改MySQL安装目录下(C:\Program Files\MySQL\MySQL Server 5.5)的my.ini文件 设置: default-character-set=utf8 character-set-server=utf8 然后重启MySQL服务,MySQL 没有重启的命令,要先停止,然后再启动.开始 -> cmd -> net stop mysql -> net start mysql 2.设置表的编码格式,执行;alter table ttname CONVER

mysql数据库中不能插入0000-00-00 00:00:00日期数据(报错Invalid datetime format: 1292 Incorrect datetime value: &#39;0000-00-00 00:00:00&#39;)

报错信息 SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '0000-00-00 00:00:00' for column 'settlementTime' at row 1 我最后把mysql设置成可空,接受null型 参考:https://yq.aliyun.com/articles/17124 mysql数据库中不能插入0000-00-00 00:00:00日期数据(报错Invalid dat

Mysql数据库理论基础之七--插入、删除、更新语句

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能

数据库批量数据插入问题分析

在数据库的相关开发中,经常会遇到数据的批量插入问题.本文主要是通过实验的方式探讨批量数据插入的瓶颈,以及优化建议. 以10w条记录的插入作为实验对象,采用下面的几种方法插入: 1.       普通插入:普通的一条条插入 2.       普通插入+手动提交:setAutoCommit(false).commit() 3.       普通插入+手动提交+ prepareStatement方式 4.       批量插入:addBatch.executeBatch 5.       批量插入:i

python中的MySQL数据库操作 连接 插入 查询 更新 操作

MySQL数据库 就数据库而言,连接之后就要对其操作.但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必须在里面建立“表”,什么是数据库的表呢?下面摘抄自维基百科对数据库表的简要解释,要想详细了解,需要看官在找一些有关数据库的教程和书籍来看看. 在关系数据库中,数据库表是一系列二维数组的集合,用来代表和储存数据对象之间的关系.它由纵向的列和横向的行组成,例如一个有关作者信息的名为 authors 的表中,每个列包含的是所有作者的某个特定类型的信息,比如

mysql数据库批量执行sql文件对数据库进行操作【windows版本】

起因: 因工作需要,在本机测试环境升级mysql数据库,需逐条执行mysql数据库的sql文件对数据库进行升级,因此找了些关于mysql的文章,对批量升级数据库所需的sql文件进行升级. 整理思路: 首先,需要对所需升级的sql所在目录的sql文件进行遍历.生成新的批量执行sql文件.想到是windows系统安装的mysql,首先想到使用bat进行sql文件的生成: 生成sql文件后,还需要使用bat文件连接到数据库,并使用新生成的sql文件进行升级. 想到升级的过程中还有可能字符集出现问题,因

MySQL数据库批量修改数据库中的表

问题:今天工作遇到这样一个问题,需要把数据库中的所有表,每个表加入四个字段,如果表少,我们可以手动去添加或者修改,如果是成千上百万张表的话,我们如何去修改,现记录下来. 解决方法: 找到数据库的建模资料,就是PDM文件.发个截图 下面我们就要用一个工具了,就是powerdesign,我们将用这个工具批量修改数据库表中的字段.需要用vb脚本. 我们打开powerdesign,点开脚本运行栏,方法,工具--如图 点击后的运行脚本框如下写好的脚本放在上面运行即可. vb语法 Option Explic

MySql数据库-查询、插入数据时转义函数的使用

最近在看一部php的基础视频教程,在做案例的时,当通过用户名查询用户信息的时候,先使用了转义函数对客户提交的内容进行过滤之后再交给sql语句进行后续的操作.虽然能看到转义函数本身的作用,但是仍然有一些疑惑. 疑惑一:当转义数据后,数据中会增加一些反斜杠,为了能查找出对应的数据,那么原来存在数据库中的数据是不是也已经被保存成含有反斜杠的了? 疑惑二:转义数据后再向数据库中插入数据,保存在数据库中的数据是否会含有过滤后的反斜杠? 带着这些疑问对用户提交的表单进行测试. echo get_magic_