资讯专栏INFORMATION COLUMN

MySQL小实践一:快速插入1000万条数据到MySQL数据库中

shuibo / 1646人阅读

摘要:今天在网上看到一篇博文,题目是分钟插入万条数据到数据库中,觉得很有意思,就记录下来供自己学习。版本,设置数据库表的容量数据库表的默认容量是,如果存储的数据超限的话会报错。在控制台输入进入数据库,输入注意后边的分号。

今天在网上看到一篇博文,题目是:4分钟插入1000万条数据到mysql数据库中,觉得很有意思,就记录下来供自己学习。
MySQL版本:mysql-5.7.22-winx64
1,设置MySQL数据库表的容量
数据库表的默认容量是:4M,如果存储的数据超限的话会报错。
在windows控制台输入mysql -uroot -p,进入MySql数据库,输入set global max_allowed_packet = 100*1024*1024;注意后边的分号
2,主要代码
    public static void main(String[] args) {
        final String driver = "com.mysql.jdbc.Driver";
        final String url = "jdbc:mysql://localhost:3306/project";
        final String user = "root";
        final String password = "253432";
        Connection conn = null;
        PreparedStatement pst =  null;
        long beginTime = 0;
        long endTime = 0;
        try {
            Class.forName(driver);//指定连接类型
            conn = DriverManager.getConnection(url, user, password);
            if(conn != null) {
                System.out.println("获取连接成功");
                beginTime = new Date().getTime();//开始计时
                String sqlPrefix = "insert into test (id,num) values ";
                // 保存sql后缀
                StringBuffer suffix = new StringBuffer();
                // 设置事务为非自动提交
                conn.setAutoCommit(false);
                // 比起st,pst会更好些
                pst = (PreparedStatement) conn.prepareStatement("");//准备执行语句
                // 外层循环,总提交事务次数
                for (int i = 1; i <= 100; i++) {
                    suffix = new StringBuffer();
                    // 第j次提交步长
                    for (int j = 1; j <= 100000; j++) {
                        // 构建SQL后缀
                        suffix.append("(""+ UUID.randomUUID().toString()+"",""+i*j+"""+"),");
                    }
                    // 构建完整SQL
                    String sql = sqlPrefix + suffix.substring(0, suffix.length() - 1);
                    // 添加执行SQL
                    pst.addBatch(sql);
                    // 执行操作
                    pst.executeBatch();
                    // 提交事务
                    conn.commit();
                    // 清空上一次添加的数据
                    suffix = new StringBuffer();
                }
                endTime = new Date().getTime();//开始计时
            }else {
                System.out.println("数据库连接失败");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("com.mysql.jdbc.Driver驱动类没有找到");
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("数据库地址错误");
        }finally {//释放资源
            System.out.println("插入成功,所有时间:"+ (endTime-beginTime));
            if(conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(pst != null) {
                try {
                    pst.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }
3,运行结果
可以看到用了两分钟

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71953.html

相关文章

  • php多进程插入数据(pcntl 学习笔记二)

    摘要:进程切换太多,影响了了效率应该是原因之一。当时,十万条记录,个进程插入总时间为单进程插入万条数据,耗时秒,相对个进程插入万记录来说,耗时少些。而单进程插入万条记录,耗时,相对来说,是挺慢的了。 个人在虚拟机centos7,单核,1G内存 /** * 模拟并发请求,10万次写入数据库 * 拆分为10个进程,每个进程处理一万条插入 */ $total = 10000; $num ...

    CoyPan 评论0 收藏0
  • mysql生成1千万条有效测试数据

    摘要:一直在找生成有效测试数据的工具与方法今天找到一个大神写的脚本这里感谢大地上的乌龟链接在这自己大神的脚本上做了一些修改生成了一个对象数组并用发到后台程序插入数据库代码如下脚本获取当前时间戳将对象数组格式化成字符串成功本人的笔记本比较渣 一直在找生成有效测试数据的工具与方法,今天找到一个大神写的JavaScript脚本,这里感谢----大地上的乌龟.链接在这:http://www.cnbl...

    hyuan 评论0 收藏0
  • mysql生成1千万条有效测试数据

    摘要:一直在找生成有效测试数据的工具与方法今天找到一个大神写的脚本这里感谢大地上的乌龟链接在这自己大神的脚本上做了一些修改生成了一个对象数组并用发到后台程序插入数据库代码如下脚本获取当前时间戳将对象数组格式化成字符串成功本人的笔记本比较渣 一直在找生成有效测试数据的工具与方法,今天找到一个大神写的JavaScript脚本,这里感谢----大地上的乌龟.链接在这:http://www.cnbl...

    ThreeWords 评论0 收藏0

发表评论

0条评论

shuibo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<