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

相关推荐
正儿八经的少年40 分钟前
布隆过滤器(解决redis缓存穿透步骤之一)
数据库·redis·缓存
xrandzj1 小时前
MySQL8.0 从零通关核心操作手册(Ubuntu实战版)
数据库·mysql
我不会插花弄玉1 小时前
4.数据类型【由浅入深-MySQL】
数据库·mysql
denggun123451 小时前
yield
前端·数据库·python
ltl2 小时前
SQLite Rollback Journal:写前拷贝与提交点
数据库
ltl2 小时前
TiFlash Learner:Raft 日志如何进列存
数据库
ltl2 小时前
BM25 与 Lucene Similarity:公式如何落到 postings
数据库
ltl2 小时前
RocksDB Block Cache 与 Bloom Filter:读放大怎么裁
数据库
deli0070074 小时前
JSON 树形查看器:粘贴即解析,折叠展开一目了然
前端·数据库·json·ai编程
国科安芯4 小时前
轨道供电韧性:ASP4644四通道降压架构在低轨卫星平台电源管理中的适用性分析
运维·网络·数据库·嵌入式硬件·架构·状态模式·低轨卫星星座