MySQL数据库 写入大量数据如何实现

发布网友

我来回答

3个回答

热心网友

//最快的方法 10000记录 23MS
public static void insert() {  
        // 开时时间  
        Long begin = new Date().getTime();  
        // sql前缀  
        String prefix = "INSERT INTO tb_big_data (count, create_time, random) VALUES ";  
        try {  
            // 保存sql后缀  
            StringBuffer suffix = new StringBuffer();  
            // 设置事务为非自动提交  
            conn.setAutoCommit(false);  
            // Statement st = conn.createStatement();  
            // 比起st,pst会更好些  
            PreparedStatement pst = conn.prepareStatement("");  
            // 外层循环,总提交事务次数  
            for (int i = 1; i <= 100; i++) {  
                // 第次提交步长  
                for (int j = 1; j <= 10000; j++) {  
                    // 构建sql后缀  
                    suffix.append("(" + j * i + ", SYSDATE(), " + i * j  
                            * Math.random() + "),");  
                }  
                // 构建完整sql  
                String sql = prefix + suffix.substring(0, suffix.length() - 1);  
                // 添加执行sql  
                pst.addBatch(sql);  
                // 执行操作  
                pst.executeBatch();  
                // 提交事务  
                conn.commit();  
                // 清空上一次添加的数据  
                suffix = new StringBuffer();  
            }  
            // 头等连接  
            pst.close();  
            conn.close();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
        // 结束时间  
        Long end = new Date().getTime();  
        // 耗时  
        System.out.println("cast : " + (end - begin) / 1000 + " ms");  
    }

热心网友

可以考虑做一个缓存,将要写入的数据先写到缓存里面,当缓存达到一定的阈值再一次性写入Mysql,这样避免了小数据量的频繁写入和读取,对mysql的性能能起到很大的提升。

热心网友

给你提供几种方法:

第一种:你可以利用foreach循环插入数据
第二种:你可以批量插入数据库,例如:
INSERT INTO `table` (`name`, `content`, `sex`)
VALUES ( 'xiaoming','测试','男'), ('xiaohong', '测试1', '女');
这种批量插入效率比较好。循环的话,如果数据量较小可以,一旦数据量较大那么性能就会降低。你可以测试下

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com