mysql batch java_聊聊java里mysql的batch操作
发布日期:2021-06-24 19:27:37 浏览次数:4 分类:技术文章

本文共 666 字,大约阅读时间需要 2 分钟。

众所周知,对于

前阵子,发现一条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://blog.csdn.net/weixin_34262786/article/details/113589716 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python中rand和randn_基于numpy.random.randn()与rand()的区别详解
下一篇:golang redis mysql_Golang的Redis操作-Go语言中文社区

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月09日 06时12分05秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章