高效的批量数据库操作

来源:互联网 发布:马歇尔计划 知乎 编辑:程序博客网 时间:2024/06/05 07:07

这阵子研究了数据库批量操作,为了让数据库批量操作时更高效,更优化,查询了网上的一些资料,今日记下,供以后用,也为广大的码友进行参考。

一、SQL批量增添数据记录

  方法一:
<span style="font-size:14px;">public static void insert() {          // 开时时间          Long begin = new Date().getTime();          // sql前缀          String prefix = "INSERT INTO tb_big_data (count, create_time, random) VALUES ";          try {              // 保存sql后缀              StringBuffer suffix = new StringBuffer();              // 设置事务为非自动提交              conn.setAutoCommit(false);              // Statement st = conn.createStatement();              // 比起st,pst会更好些              PreparedStatement pst = conn.prepareStatement("");              // 外层循环,总提交事务次数              for (int i = 1; i <= 100; i++) {                  // 第次提交步长                  for (int j = 1; j <= 10000; j++) {                      // 构建sql后缀                      suffix.append("(" + j * i + ", SYSDATE(), " + i * j                              * Math.random() + "),");                  }                  // 构建完整sql                  String sql = prefix + suffix.substring(0, suffix.length() - 1);                  // 添加执行sql                  pst.addBatch(sql);                  // 执行操作                  pst.executeBatch();                  // 提交事务                  conn.commit();                  // 清空上一次添加的数据                  suffix = new StringBuffer();              }              // 头等连接              pst.close();              conn.close();          } catch (SQLException e) {              e.printStackTrace();          }          // 结束时间          Long end = new Date().getTime();          // 耗时          System.out.println("cast : " + (end - begin) / 1000 + " ms");      }  </span>

输出时间:cast : 23 ms

该方法目前测试是效率最高的方法!

方法二

Union All做合并,合并完一张表之后,整张表导入。下面就简单介绍一下。


    Union All是做联表查询的,平常的用法是:

         select * from Table1 union all select * from Table2
union all在这里的用法是,查询Table1的时候,先查询Table2的所有字段,将所有字段和Table2合并起来,然后显示出来。union同样也能做这个功能,不过二者有一点区别。union合并的时候,是两张表相同的字段合并为一个字段,而union all做到的是整张表所有的字段都合并给Table1。


所以批量插入时可以
insert into table(字段1,字段2,...) UNION ALL select '字段1','字段2',.... UNION ALL select '字段11','字段21',....




0 0
原创粉丝点击