文档章节

Mysql 批量插入数据

yeqiang2015
 yeqiang2015
发布于 2017/12/12 18:00
字数 458
阅读 40
收藏 0

最近需要测试日志查询性能的,感觉比较慢所有需要进行大数据量的数据进行测试,发现mysql的批量导入数据很强悍,导入10万条数据,只要15596ms。

    其中需要注意的一下几点:

  1.提交方式需要设置为手动提交:

        conn.setAutoCommit(false); // 设置手动提交 

  2. 采用mysql的批量导入语句:

        pstmt.addBatch();

       pstmt.executeBatch(); // 执行批量处理  

   之后再提交: 

     conn.commit();  // 提交  

3.将mysql批量导入功能开启:

  在mysql的jdbc.url地址中添加参数:

useServerPrepStmts=false&rewriteBatchedStatements=true&useSSL=false

 

  结果展示:

 

 

代码如下:

     /**
     * 查询数据库中配置的分馆信息
     */
    public static void insertTestData(){
        long begint = System.currentTimeMillis();
        System.out.println("========开始导入时间:"+begint+"=================");
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Connection conn = null;
        int count = 100000;
        try {
             String insertSql = "";
             insertSql = "INSERT INTO user_access_log(uid,cn,appName,port,serverIP,userIP,createDate,operation,details,signature)  VALUES (?,?,?,?,?,?,?,?,?,?)";
            
            conn = getMysqlConnect("audit");
            conn.setAutoCommit(false); // 设置手动提交 
            System.out.println("============insertSql:"+insertSql+"======================");
            pstmt = conn.prepareStatement(insertSql,Statement.RETURN_GENERATED_KEYS); 
          
            for (int i = 0; i < count; i++) {
                pstmt.setString(1, "test02");
                pstmt.setString(2, "test02");
                pstmt.setString(3, "sso");
                pstmt.setInt(4, 80);
                pstmt.setString(5, "127.0.0.1");
                pstmt.setString(6, "172.16.208.99");
                pstmt.setDate(7, new java.sql.Date(System.currentTimeMillis()));
                pstmt.setInt(8, 0);
                pstmt.setString(9, "test02正常登录"+i);
                pstmt.setString(10, null);
                pstmt.addBatch();
                
                if( i%1000 == 0 ){
                    pstmt.executeBatch(); // 执行批量处理  
                }
            }
            pstmt.executeBatch(); // 执行批量处理  
            conn.commit();  // 提交  
            pstmt.close();
            conn.close();  
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            if(pstmt != null){
                pstmt = null;
            }
            if(rs != null){
                rs = null;
            }
            if(conn != null){
                conn = null;
            }
        }
        long endt = System.currentTimeMillis();
        System.out.println("========结束导入时间:"+endt+"=================");
        System.out.println("========导入数据"+count+"条共耗时间:"+(endt-begint)+"ms================="); 
    }

 

 

   /**
     * 根据mysql配置文件获取数据库连接
     */

public static Connection getMysqlConnect(String dbname){
        Connection con = null;
        String username = "";
        String password = "";
        String url = null;
        String address = "";
        String port = "";
        try {
            PropertyParser pParser = new PropertyParser(Const.ROOTPATH
                    + "logconfig.properties");
            url = pParser.getValue("db.url");
            address = url.substring((url.indexOf("/") + 2), url
                    .lastIndexOf(":"));
            port = url.substring((url.lastIndexOf(":") + 1), url
                    .lastIndexOf("/"));
            
            username = pParser.getValue("db.user");
            password = pParser.getValue("db.password");
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://" + address + ":"+ port + "/"+dbname+"?useServerPrepStmts=false&rewriteBatchedStatements=true&useSSL=false&user="+username+"&password="+password+"&useUnicode=true&characterEncoding=UTF-8");
        } catch (IOException e1) {
            e1.printStackTrace();
            return null;
        } catch (ClassNotFoundException e2) {
            e2.printStackTrace();
            return null;
        } catch (SQLException e3) {
            e3.printStackTrace();
            return null;
        }
        return con;
    }

 

 

 

© 著作权归作者所有

yeqiang2015
粉丝 2
博文 21
码字总数 7740
作品 0
丰台
后端工程师
私信 提问
优雅地使用pt-archiver进行数据归档

mysql 日志 公有云 test charset uuid source statistics 摘要: 一、引言 最近由于业务需求,需要将公有云RDS(业务库)的大表数据归档至私有云MySQL(历史库),以缩减公有云RDS的体积和成...

姬子玉
2017/11/30
0
0
MySQL批量插入返回自增ID的问题

MySQL批量插入返回自增ID的问题 Mz的博客2017-08-1838 阅读 数据库MySQL 业务场景 现需将表A中的数据经过转换后迁移入表B,并将一些附加数据存入表C,表C通过一个BId字段来与表B中的数据进行...

Mz的博客
2017/08/18
0
0
优雅的使用pt-archiver进行数据归档

作者简介:蓝剑锋 TCL高级DBA,MySQL&Oracle OCP,负责数据库架构设计、数据库自动化运维平台。微信:lanjian106103,个人公众号:DBARUN 一. 引言 最近由于业务需求,需要将公有云RDS(业务...

ACMUG
2018/01/09
0
0
MySQL的百万级性能测试——(一)环境搭建与百万级数据插入

MySQL——全球最流行的数据库(没有之一,就使用量而言)。 ——开源数据库。 ——与mongoDB不同,MySQL是一门关系型数据库。 此系列文章,作者本人将推演至个人毕业设计之中。所以在毕设前,...

志明丶
2017/11/16
0
0
Oracle 批量插入数据怎么做

记得mysql 批量插入数据 INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9),……; 我查了网上说的Oracle批量插入的好像不合我的意思。 我的意思就是像mysql的这种批量插入数据,有...

pengcheng_1024
2014/07/18
23.3K
9

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部