最近公司需要和第三方对接同步数据,数据有几百万条来回的传输,当上百万的数据要更新入库时,我犯了难,由于项目框架过于老旧(新的框架博主没有去了解怎么去大批量入库),使用的ibatis框架在入库上百万的数据时很久(可能是框架需要解析你的sql),时间大概在5-10分钟甚至更久,这很明显不符合我的预期,经过我多方的学习,什么分批插入,sql的批量拼接等等都没有达到我的预期,最后发现大佬们用原生的JDBC去重复的生成sql然后一次性提交,这样百万级别的数据入库也就需要十多秒,如图1
图1
紧接着博主立马应用到我的需求里面,经过一顿改改改,终于把使用框架插入换成使用JDBC插入,然后我信心满满的启动项目跑跑跑,然后发现不对劲,怎么比我没改之前还要慢啊十多分钟都跑不完,怎么会这么奇怪呢,立马打断点。循环生成sql这一步很快。在JDBC提交这里很慢,紧接着去看表,是不是表有问题,换表在插入还是慢,各种方向一顿排查还是没有发现问题,最后去看sql,发现插入的value和values不一样,改了再跑,快了!!!从十多分钟都跑不完变成的十多秒跑完,泪目,那么一点小问题半天没有发现(刚开始博主确实不懂MySQL中value和values的区别)。
我解决完这个问题的时候立马百度了value和values有啥区别,发现挺多博主说value要比values要快,这就很奇怪了,我跑百万数据入库的时候values要比value快超级多,根本不是在一个量级的,百思不得其解,最后如果有小伙伴想要JDBC的代码大家可以去参考这个博主的代码:教你如何6秒钟往MySQL插入100万条数据的实现_Mysql_脚本之家