国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
jdbc批量插入實(shí)現(xiàn)大批量數(shù)據(jù)快速插入

    今天在做一個(gè)將excel數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫的程序時(shí),由于數(shù)據(jù)量大,準(zhǔn)備采用jdbc的批量插入。于是用了preparedStatement.addBatch();當(dāng)加入1w條數(shù)據(jù)時(shí),再執(zhí)行插入操作,preparedStatement.executeBatch()。我原以為這樣會(huì)很快,結(jié)果插入65536條數(shù)據(jù)一共花30多分鐘,完全出乎我的意料。于是問了一下同事,他們在處理這種大批量數(shù)據(jù)導(dǎo)入的時(shí)候是如何處理的,發(fā)現(xiàn)他們也是用的jdbc批量插入處理,但與我不同是:他們使用了con.setAutoCommit(false);然后再preparedStatement.executeBatch()之后,再執(zhí)行con.commit();于是再試,什么叫奇跡?就是剛剛導(dǎo)入這些數(shù)據(jù)花了半小時(shí),而加了這兩句話之后,現(xiàn)在只用了15秒鐘就完成了。于是去查查了原因,在網(wǎng)上發(fā)現(xiàn)了如下一段說明:

    * When importing data into InnoDB, make sure that MySQL does not have autocommit mode enabled because that

      requires a log flush to disk for every insert. To disable autocommit during your import operation, surround it with

      SET autocommit and COMMIT statements:

      SET autocommit=0;
     ... SQL import statements ...
     COMMIT;

    第一次,正是因?yàn)闆]有setAutoCommit(false);那么對于每一條insert語句,都會(huì)產(chǎn)生一條log寫入磁盤,所以雖然設(shè)置了批量插入,但其效果就像單條插入一樣,導(dǎo)致插入速度十分緩慢。

    部分代碼如下:

String sql = "insert into table *****";con.setAutoCommit(false);ps = con.prepareStatement(sql);for(int i=1; i<65536; i++){    ps.addBatch();    // 1w條記錄插入一次    if (i % 10000 == 0){         ps.executeBatch();         con.commit();     }}// 最后插入不足1w條的數(shù)據(jù)ps.executeBatch();con.commit();

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JDBC的PreparedStatement啟動(dòng)事務(wù)使用批處理executeBatch()
[轉(zhuǎn)]Statement和PreparedStatement批量更新
Java JDBC批處理插入數(shù)據(jù)操作
Java 批量插入數(shù)據(jù)庫(MySQL)數(shù)據(jù)
往MySQL中存儲(chǔ)圖片
批量處理JDBC語句提高處理速度
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服