过去几天我一直想知道Java的Batch Insert如何在后端运行。这是一个示例代码,我一直想给自己一个想法:
for (int ctr = 0; ctr < myArrayList.size(); ctr = ctr ++ ) {
myStatement.setObject(1, myArrayList.get(ctr) );
myStatement.addBatch();
myStatement.clearParameters();
}
然后调用myStatement.executeBatch()
。这个示例代码给我留下了两个想法。
首先,在调用executeBatch()
之后,数据库是否按INSERT
批量执行myStatement
语句?如果myStatement
批量大小为3,那么数据库是否会执行3次INSERT
语句?
如果是,那么数据库是否会执行从第一批到底部或相反的INSERT
语句? (是的,批次的安排对我而言)
其次,数据库是否执行单个INSERT
语句,其中VALUES以逗号分隔?
答案 0 :(得分:0)
主要是驱动程序依赖于如何将所有内容编码到服务器,但一般要点是它存储所请求的语句执行(以及每次执行的参数),当您调用“executeBatch”时,它将所有内容发送到服务器一下子。保证执行顺序符合您在代码中调用“addBatch”的顺序。因此,您按照您希望执行的顺序进行编码(而不是您认为可能选择的反向顺序)。
因为这是对服务器的一次调用,所以通常以这种方式更快,因为您不必进行大量的往返旅行。这是实现这一目标的主要优势。
批量调整是一种艺术形式,但是如果你看一下像hibernate这样的东西(如果你要求它可以在引擎盖下使用批处理),他们建议每批约15次执行。拿一粒盐,但这是一个很好的起始数字。