当前位置:   article > 正文

mysql批量导入数据方式对比

mysql导入方法对比

原文来自:blog.csdn.net/m0_37981235…

第一种:普通for循环插入

junit

  1. @Test
  2. public void testInsertBatch2() throws Exception {
  3. long start = System.currentTimeMillis();
  4. User user;
  5. SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(false);
  6. UserDao mapper = sqlSession.getMapper(UserDao.class);
  7. for (int i = 0; i < 500; i++) {
  8. user = new User();
  9. user.setId("test" + i);
  10. user.setName("name" + i);
  11. user.setDelFlag("0");
  12. mapper.insert(user);
  13. }
  14. sqlSession.commit();
  15. long end = System.currentTimeMillis();
  16. System.out.println("---------------" + (start - end) + "---------------");
  17. }
  18. 复制代码

②xml配置

  1. <insert id="insert">
  2. INSERT INTO t_user (id, name, del_flag)
  3. VALUES(#{id}, #{name}, #{delFlag})
  4. </insert>
  5. 复制代码

第二种:mybatis BATCH模式插入

①junit类

  1. @Test
  2. public void testInsertBatch2() throws Exception {
  3. long start = System.currentTimeMillis();
  4. User user;
  5. SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);//跟上述sql区别
  6. UserDao mapper = sqlSession.getMapper(UserDao.class);
  7. for (int i = 0; i < 500; i++) {
  8. user = new User();
  9. user.setId("test" + i);
  10. user.setName("name" + i);
  11. user.setDelFlag("0");
  12. mapper.insert(user);
  13. }
  14. sqlSession.commit();
  15. long end = System.currentTimeMillis();
  16. System.out.println("---------------" + (start - end) + "---------------");
  17. }
  18. 复制代码

②xml配置与第一种②中使用相同


第三种:foreach方式插入

①junit类

  1. @Test
  2. public void testInsertBatch() throws Exception {
  3. long start = System.currentTimeMillis();
  4. List<User> list = new ArrayList<>();
  5. User user;
  6. for (int i = 0; i < 10000; i++) {
  7. user = new User();
  8. user.setId("test" + i);
  9. user.setName("name" + i);
  10. user.setDelFlag("0");
  11. list.add(user);
  12. }
  13. userService.insertBatch(list);
  14. long end = System.currentTimeMillis();
  15. System.out.println("---------------" + (start - end) + "---------------");
  16. }
  17. 复制代码

②xml配置

  1. <insert id="insertBatch">
  2. INSERT INTO t_user
  3. (id, name, del_flag)
  4. VALUES
  5. <foreach collection ="list" item="user" separator =",">
  6. (#{user.id}, #{user.name}, #{user.delFlag})
  7. </foreach >
  8. </insert>
  9. 复制代码

特别注意:mysql默认接受sql的大小是1048576(1M),即第三种方式若数据量超过1M会报如下异常:(可通过调整MySQL安装目录下的my.ini文件中[mysqld]段的"max_allowed_packet = 1M")

结果对比:

转载于:https://juejin.im/post/5c0a3929f265da61776bc78a

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/算法构造者/article/detail/61837
推荐阅读
相关标签
  

闽ICP备14008679号