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


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

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

    方式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
  • 相关阅读:
    YOLOv7-Pose尝鲜,基于YOLOv7的关键点模型测评
    获取1688店铺详情 API接口(获取卖家昵称、店铺类型、公司信息、店铺标题、店铺主页)
    ESP32网络开发实例-非接触式水位监测
    PC电脑可以当服务器使用吗?
    金仓数据库KingbaseES安全指南--6.7. GSSAPI身份验证
    【推荐收藏】这8个常用缺失值填充技巧一定要掌握
    winform中也可以这样做数据展示✨
    Centos7 bash:jps:Command not found....
    某电商网站的数据库设计(8)——创建花费信息查询视图
    【小程序项目开发 -- 京东商城】uni-app 商品分类页面(下)
  • 原文地址:https://blog.csdn.net/weixin_45405302/article/details/126451060