mysql 批量修改优化方案

一、场景批量修改多条数据

1、循环里修改

php 复制代码
     public function test1foreach1()
    {
        $startTime = time();
        $table = M("table");
        $data =  $table->select();
        foreach ($data as $k => $v) {
            $table->where("id = {$v['id']}")->save(['type' => $v['type'] + 1,'league'=>{$v['league'].$k}]);
        }
        $endTime = time();
        echo  $endTime - $startTime;
        die;
    }

2、拼接case when

php 复制代码
public function test1()
    {
        $startTime = time();
        $leagueValues = [];
        $typeValues = [];
        $ids = [];
        $table = M("table");
        $data =  $table->select();
        $updateSql = "UPDATE table SET league = CASE id";
        foreach ($data as $row) {
            $league = $row['league'] . $row['type'];
            $league = str_replace("'", "\'", $league);
            $type = $row['type'] - 1;
            $values1[] = "WHEN {$row['id']} THEN '{$league}'";
            $values2[] = "WHEN {$row['id']} THEN '{$type}'";
            $ids[] = $row['id'];
        }
        $ids = implode(',', $ids);
        $values1 = implode(' ', $values1);
        $values2 = implode(' ', $values2);
        $updateSql .= " {$values1} END , type = CASE id {$values2} END WHERE id IN ({$ids})";

        $result = M("table")->execute($updateSql);
        $endTime = time();
        echo  $endTime - $startTime;
        die;
    }

一万条数据第一种方式需要执行900多秒。第二种只需要3秒左右。

相关推荐
档案宝档案管理4 小时前
零售行业档案管理的痛点与解决方案:档案管理系统显身手
大数据·数据库·人工智能·档案·零售·档案管理
艾菜籽4 小时前
MyBatis动态sql与留言墙联系
java·数据库·sql·spring·mybatis
weixin_307779134 小时前
C#程序实现将Teradata的存储过程转换为Amazon Redshift的pgsql的存储过程
数据库·c#·云计算·运维开发·aws
青~4 小时前
sql 双游标循环
数据库·sql
一辉ComeOn4 小时前
【大数据高并发核心场景实战】 数据持久化层 - 查询分离
java·大数据·数据库·elasticsearch·缓存·oracle
雾里云山4 小时前
pgsql常用函数
java·开发语言·数据库·sql
好记忆不如烂笔头abc4 小时前
通过gdb推进修改oracle scn
数据库·oracle
爱思德学术5 小时前
中国计算机学会(CCF)推荐学术会议-B(数据库/数据挖掘/内容检索):PODS 2026
数据库·数据分析·数据可视化·数据库系统
l1t6 小时前
用Lua访问DuckDB数据库
数据库·junit·lua·duckdb
星空露珠6 小时前
数独生成题目lua脚本
数据结构·数据库·算法·游戏·lua