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秒左右。

相关推荐
IT摆渡者3 小时前
MySQL性能巡检脚本分析报告
数据库·mysql
Lyyaoo.4 小时前
Redis基础
数据库·redis·缓存
杨云龙UP4 小时前
ODA登录ODA Web管理界面时提示Password Expired的处理方法_20260423
linux·运维·服务器·数据库·oracle
解救女汉子5 小时前
SQL触发器如何获取触发源应用名_利用APP_NAME函数追踪
jvm·数据库·python
weixin_520649876 小时前
数据库函数
数据库
Bert.Cai7 小时前
MySQL LPAD()函数详解
数据库·mysql
OnlyEasyCode8 小时前
Navicat 任务自动备份指定数据库
数据库
if else8 小时前
Redis 哨兵集群部署方案
数据库·redis
yejqvow128 小时前
Pandas 高效实现组内跨行时间戳匹配与布尔标记
jvm·数据库·python
了不起的云计算V9 小时前
从DeepSeek V4适配看国产算力的三个拐点
数据库·人工智能