首页 > 解决方案 > 在 laravel 中更新时如何优化查询原始?

问题描述

我有一个大表(20k 行)和一个要更新的查询,parent_id但是需要很长时间,我该如何优化它?谢谢。

DB::table('commodity', 'c1')->whereNotNull('c1.c_level')->update([
            'c1.parent_id' => DB::raw('(SELECT c2.id
        FROM commodity c2
        WHERE c2.short_order < c1.short_order
          AND IF(c1.`c_level` > 0,
                     c2.c_level = (c1.c_level - 1),
                     c2.c_level is null)
        ORDER BY c2.short_order DESC
        LIMIT 1)')
        ]);

SQL:

update commodity as c1  set
      c1.parent_id = ( SELECT c2.id FROM commodity c2
         WHERE c2.short_order < c1.short_order
           AND IF(c1.c_level > 0,
                  c2.c_level = (c1.c_level - 1),
                  c2.c_level is null)
         ORDER BY c2.short_order DESC LIMIT 1
                     )
    where c1.c_level is not null 

标签: mysqllaravel

解决方案


首先获取parent_id. 然后尝试使用不同的查询进行更新。


推荐阅读