• 批量修改/插入数据库的时候究竟该怎么选择?


    在工作中肯定会遇到批量修改数据的场景,但是究竟怎么选择才能更快速的完成修改呢?

    目前仅对一下几种方式进行对比

    方式1:外层for循环每一次处理就调用一次mysql数据库
    方式2:使用MyBatis的xml循环每条语句使用;分割

    有需要的可以在尾部获取 制造数据的语句

    在100w条数据中 根据主键 update 后面的字段
    分别更新100条 500条 1000条 1w条对比更改需要的时间
    分别把第二个字段更改为主键+1

    修改性能对比

    \51010050010001w10w20w
    for循环197ms203ms326ms746ms1323ms7048ms55380ms127280ms
    ForEach177ms183ms289ms515ms791ms5828ms55621ms103119ms
    分别相差20ms20ms28ms231ms532ms1220ms-241ms24161ms

    基本上ForEach都快于for循环
    总结无脑用ForEach就行

    insert性能对比

    194ms|206ms| 221ms|373ms|815ms|1144ms|6573ms|50505ms

    \251010050010001w10w
    for循环194ms206ms221ms373ms815ms1144ms6573ms50505ms
    ForEach170ms191ms223ms225ms195ms215ms498ms2250ms
    分别相差24ms15ms-2ms148ms620ms929ms6075ms48255ms

    总结无脑使用foreach就好了,insert的优化巨大。update也有明显的减少

    具体代码
    https://github.com/lucine-maker/batch-update

    制造数据的语句

    创表语句
    CREATE TABLE `batch_test` (
      `emp_no` int NOT NULL,
      `title` varchar(50) NOT NULL,
      PRIMARY KEY (`emp_no`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    
    
    -- 写函数之前必须要写,标志
    DELIMITER $$
    CREATE FUNCTION `mock_data` ()
    	RETURNS INT
    BEGIN
    	DECLARE num INT DEFAULT 1000000;
    	DECLARE i INT DEFAULT 0;
    	WHILE i
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    k8s系列(二)之k8s高可用集群环境搭建
    RISC-V与RISC Zero zkVM的关系
    JAVA---RMI详解1
    jenkins 部署 vue 项目
    【网络】详解http协议
    EasyExcel的简单读取操作
    [附源码]计算机毕业设计Springboot电影推荐网站
    mac安装hive 2.3.9
    基础复习——利用Room简化数据库操作——重点
    好物推荐:文字转语音朗读软件哪个好?
  • 原文地址:https://blog.csdn.net/weixin_45405302/article/details/126451060