插入50万条记录到mysql_mysql(表:InnoDB,无索引),批量插入50万条记录后,越来越慢。...

插入10000条,已用时0秒

插入20000条,已用时2秒

插入30000条,已用时3秒

插入40000条,已用时3秒

插入50000条,已用时4秒

插入60000条,已用时5秒

插入70000条,已用时6秒

插入80000条,已用时7秒

插入90000条,已用时8秒

插入100000条,已用时9秒

插入110000条,已用时11秒

插入120000条,已用时12秒

插入130000条,已用时13秒

插入140000条,已用时14秒

插入150000条,已用时15秒

插入160000条,已用时16秒

插入170000条,已用时17秒

插入180000条,已用时18秒

插入190000条,已用时19秒

插入200000条,已用时21秒

插入210000条,已用时22秒

插入220000条,已用时23秒

插入230000条,已用时25秒

插入240000条,已用时26秒

插入250000条,已用时27秒

插入260000条,已用时28秒

插入270000条,已用时30秒

插入280000条,已用时31秒

插入290000条,已用时32秒

插入300000条,已用时33秒

插入310000条,已用时34秒

插入320000条,已用时36秒

插入330000条,已用时37秒

插入340000条,已用时38秒

插入350000条,已用时39秒

插入360000条,已用时41秒

插入370000条,已用时42秒

插入380000条,已用时43秒

插入390000条,已用时44秒

插入400000条,已用时45秒

插入410000条,已用时46秒

插入420000条,已用时48秒

插入430000条,已用时49秒

插入440000条,已用时50秒

插入450000条,已用时52秒

插入460000条,已用时57秒

插入470000条,已用时66秒

插入480000条,已用时76秒

插入490000条,已用时90秒

插入500000条,已用时105秒

插入510000条,已用时123秒

插入520000条,已用时142秒

插入530000条,已用时164秒

插入540000条,已用时187秒

插入550000条,已用时212秒

插入560000条,已用时239秒

插入570000条,已用时266秒

插入580000条,已用时294秒

插入590000条,已用时323秒

插入600000条,已用时358秒

插入610000条,已用时389秒

插入620000条,已用时421秒

插入630000条,已用时458秒

插入640000条,已用时496秒

停止程序,再次运行,一万条需几十秒。

清空该表,重新运行,很快。在将近插入50万条记录时,一万条需几十秒。public static void main(String[] args) { PreparedStatement pstmt = null; Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/pis"; String username = "root"; String password = "root"; conn = DriverManager.getConnection(url, username, password); conn.setAutoCommit(false); String sql = "SELECT T.ID FROM PIS_PERSON_EX T WHERE T.NAME LIKE 'TEST%'"; PreparedStatement statement = conn.prepareStatement(sql); ResultSet result = statement.executeQuery(); String sql2 = "INSERT INTO PIS_RECORD (ID, RCTIMES, RCTIMEP, YEARS, MONTHS, DAYS, YMD, PERSONID, DEVICEID, NOTESTR) " + " VALUES (?,?,?,?,?,?,?,?,?,?)"; pstmt = conn.prepareStatement(sql2); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); Random random = new Random(); int pos = 0; Date t1 = new Date(); while (result.next()) { for (int i = 1; i <= 31; i++) { String day = i + ""; if (i < 10) { day = "0" + i; } for(int j = 0; j < 5; j++){ Date checkStartTime = new Date( sdf.parse("201601" + day + "090000").getTime() - (random.nextInt(21600000) - 10800000)); Date checkEndTime = new Date( sdf.parse("201601" + day + "180000").getTime() - (random.nextInt(21600000) - 10800000)); String checkStartTimeStr = sdf.format(checkStartTime); String checkEndTimeStr = sdf.format(checkEndTime); pstmt.setString(1, UUID.randomUUID().toString().replaceAll("-", "")); pstmt.setString(2, checkStartTimeStr); pstmt.setTimestamp(3, new Timestamp(checkStartTime.getTime())); pstmt.setString(4, checkStartTimeStr.substring(0, 4)); pstmt.setString(5, checkStartTimeStr.substring(4, 6)); pstmt.setString(6, checkStartTimeStr.substring(6, 8)); pstmt.setString(7, checkStartTimeStr.substring(0, 8)); pstmt.setString(8, result.getString(1)); pstmt.setString(9, "402888634f5d7f28014f62f346af1268"); pstmt.setString(10, "NONE"); pos++; pstmt.addBatch(); pstmt.setString(1, UUID.randomUUID().toString().replaceAll("-", "")); pstmt.setString(2, checkEndTimeStr); pstmt.setTimestamp(3, new Timestamp(checkEndTime.getTime())); pstmt.setString(4, checkEndTimeStr.substring(0, 4)); pstmt.setString(5, checkEndTimeStr.substring(4, 6)); pstmt.setString(6, checkEndTimeStr.substring(6, 8)); pstmt.setString(7, checkEndTimeStr.substring(0, 8)); pstmt.setString(8, result.getString(1)); pstmt.setString(9, "402888634f5d7f28014f62f346af1268"); pstmt.setString(10, "NONE"); pos++; pstmt.addBatch(); if (pos % 10000 == 0) { long sj = (new Date().getTime() - t1.getTime()) / 1000; pstmt.executeBatch(); conn.commit(); System.out.println("插入" + pos + "条,已用时"+sj+"秒"); } } } } pstmt.executeBatch(); conn.commit(); } catch (Exception e) { e.printStackTrace(); } finally { if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值