当前位置:   article > 正文

mysql batch java_聊聊java里mysql的batch操作

batchhasplainstatements

众所周知,对于

前阵子,发现一条sql的性能明细不正常,几千条

调了一下代码,翻到了mysql-connector里,关键的代码是这么一块:

if (!this.batchHasPlain

可以看到有executeBatchedInserts和executeBatchSerially两个分支,如果执行到executeBatchSerially的话,其实就是执行了个“假的”batch, 在这个方法里会每条数据单独去跟mysql交互。

为了能顺利的执行进executeBatchedInserts, 可以看到有一些先决条件:batchHasPlainStatements, connection.getRewriteBatchedStatements(), canRewriteAsMultiValueInsertAtSqlLevel。

事实上,为了能顺利的执行批量sql, mysql的驱动会对sql做一次“改写(

insert into ()

改写完之后,变成了这样:

insert into () values () () ()

变成了一条sql, 当然就是与mysql交互一次了。

成功rewrite后,才能批量执行sql。上边的几个条件也基本都是为了能让sql进行改写。这里边关键的其实就是两个点,一是数据库连接层面,需要

insert into () set x=x,y=y

这种语法本身不属于sql标准,是mysql的“方言”,也是没有批量操作的形式的。因此,如果把sql写成这种形式,就不然没法执行真正的批量操作了。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/算法设计者/article/detail/61859
推荐阅读
相关标签
  

闽ICP备14008679号