2 csdnzlw csdnzlw 于 2016.03.03 16:11 提问

mysql 插入10万条数据 优化效率
public int addTypes(List<taobaoBean> babyList) {

    String sql = "insert into type (typeid,url) values (?,?) ";
    Connection conn = dbhelper.getConnection(driver,url,username,upwd);
    int result  = 0;
    PreparedStatement stmt =null;
    try {
        stmt = conn.prepareStatement(sql);
        for(int i=0;i<babyList.size();i++){
            stmt.setInt(1, babyList.get(i).getTypeId());
            stmt.setString(2, babyList.get(i).getUrl());
            stmt.addBatch();
        }
        stmt.executeBatch();
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        dbhelper.closeCon(conn);
    }
    return result;
}

1分钟才插入3000条数据,如何变快。

3个回答

Royal_lr
Royal_lr   Ds   Rxr 2016.03.03 16:43

批处理,,成批的插入

csdnzlw
csdnzlw 能在我的例子上修改一下?
2 年多之前 回复
oyljerry
oyljerry   Ds   Rxr 2016.03.03 16:50

批量插入,不要一条条插入,mysql支持一次插入多条记录

csdnzlw
csdnzlw 能给个例子吗?
2 年多之前 回复
qq423399099
qq423399099   Ds   Rxr 2016.03.04 09:31

有两种方法:
1. 一条SQL语句插入多条数据。
INSERT INTO insert_table (datetime, uid, content, type) VALUES ('0', 'userid_0', 'content_0', 0);

INSERT INTO insert_table (datetime, uid, content, type) VALUES ('1', 'userid_1', 'content_1', 1);
可以将上面这种一条条插入的语句合并成下面这种
INSERT INTO insert_table (datetime, uid, content, type) VALUES('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);

这种方法可以减少SQL语句解析的操作, 只需要解析一次就能进行数据的插入操作,而且SQL语句较短,可以减少网络传输的IO。
2.在事务中进行插入处理
START TRANSACTION;

INSERT INTO insert_table (datetime, uid, content, type) VALUES ('0', 'userid_0', 'content_0', 0);

INSERT INTO insert_table (datetime, uid, content, type) VALUES ('1', 'userid_1', 'content_1', 1);

...

COMMIT;

通过使用事务可以减少数据库执行插入语句时多次“创建事务,提交事务”的消耗,所有插入都在执行后才进行提交操作。

注:两种方法我测了下插入1W条的话,第一种方法和第二种方法之前都要大概11秒,优化以后第一种只要0.2秒,第二种要1秒
LZ也可以两种结合在一起用

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
mysql 一次插入几万条数据应该怎么做优化
对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此,优化数据库插入性能是很有意义的。经过对MySQL InnoDB的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考。 1、insert批量执行,禁止单条insert value(注意单条sql长度限制,可临时...
一次性往mysql中插入10万条数据,只需7秒
不解释,直接上代码$connect_mysql-&amp;gt;autocommit(false); mysqli_query($connect_mysql,'set names utf8'); $begin = time(); $sqls =''; for($i=1;$i&amp;lt;=100000;$i++){ $sqls .= &quot;('......
MySQL使用存储过程插入千万级数据如何提升效率?
-- MySQL测试任务:使用存储过程,往表中插入千万级数据,根据索引优化速度 -- 1.使用索引查询 -- 2.不使用索引查 -- 3.比较两者查询速度的差异 -- 1.创建索引测试表 DROP TABLE IF EXISTS index_test; CREATE TABLE index_test( id BIGINT(20) PRIMARY KEY NOT NULL AU
mysql数据库100万条数据插入采用jdbc的各种方式效率对比。
最近要插入100万左右的数据,还包括计算过程,为了压缩请求时间,特意试了下几种常见的jdbc方式的效率。package test.jbdc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import org.junit.Test; /** * 大数...
hibernate批量数据插入优化 ------用Hibernate插入1万条数据,怎么做,有什么好的优化方法吗
Hibernate批量处理: Hibernate批量处理其实从性能上考虑,它是很不可取的,浪费了很大的内存。从它的机制上讲,Hibernate它是先把符合条件的数据查出来,放到内存当中,然后再进行操作。实际使用下来性能非常不理想,在笔者的实际 使用中采用下面的第三种优化方案的数据是:100000条数据插入数据库,主流台式机的配置,需要约30分钟,呵呵,晕倒. 总结下来有三种来
关于批量插入数据之我见(100万级别的数据,mysql)
100万数据的插入操作
MySQL批量插入性能优化(三)
测试的方案: 执行10万次Insert语句,使用不同方式。 C组:静态SQL,不自动提交,有事务控制(InnoDB引擎) 1、逐条执行10万次 2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。   D组:预编译模式SQL,不自动提交,有事务控制(InnoDB引擎) 1、逐条执行10万次 2、分批执行将10万分成m批,每批n条,分多种
绝对干货,教你4分钟插入1000万条数据到mysql数据库表
我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4232009 > 4194304). Yo
mysql 更新 10W条记录速度很慢
今天  遇到了个问题    update  table1 t  set t.column1 =0 where t.id in (select id from table2)       就是要更新的数据大概 有10W多条  然后 我执行了下 结果 2个小时了 还是没 执行成功,  后来 问了个 厉害的小伙伴        他把sql 改成了   update table1 t ,table2
mysql优化存储过程中批量插入的速度
第一次操作,每一条数据执行一次插入操作。 一万条数据花费34s,太慢。 CREATE PROCEDURE insertPro(in sum INT) BEGIN DECLARE count INT DEFAULT 0; DECLARE i INT DEFAULT 0; set count=0; set i = rand() * 10000; while count<sum do inse