普通逻辑:(共有10万条sql语句

@Test
void testSaveOneByOne() {
    long b = System.currentTimeMillis();
    for (int i = 1; i <= 100000; i++) {
        userService.save(buildUser(i));
    }
    long e = System.currentTimeMillis();
    System.out.println   
("耗时: " + (e - b));
}

快速逻辑:(共有100条sql语句

每次批量插入1000条数据, 插入100次即10万条数据

@Test
void testSaveBatch() {
    // 1.准备一个容量为1000的集合
    List<User> list = new ArrayList<>(initialCapacity: 1000);

    long b = System.currentTimeMillis();
    for (int i = 1; i <= 100000; i++) {
        // 2.添加一个User
        list.add(buildUser(i));

        // 3.每1000条批量插入一次
        if (i % 1000 == 0) {
            userService.saveBatch(list);
            // 4.清空集合, 准备下一批数据
            list.clear();
        }
    }
}
  • 相比于逐条插入,批量插入可以显著提高数据库插入性能,减少与数据库的交互次数。
  • 预分配容量 初始化ArrayList时指定初始容量,可以减少扩容操作,提高性能。

也可以使用Iservice开启性能参数,这种速度最快

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐