mysql - 在 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
解决方案
首先获取parent_id
. 然后尝试使用不同的查询进行更新。
推荐阅读
- node.js - 从控制器返回结果到路由节点js
- angular - 如何从 ABP Angular 6 进行外部 REST 调用
- c# - 当我尝试提交 Visual C# 项目文件时,Git 没有完全退出(退出代码 1)
- protocol-buffers - 无法将 gRPC 作为依赖项添加到 macOS 上的其他 Bazel 项目
- git - Github 可以推送远程引用的数量限制(在 x 时间跨度内)?
- python-3.x - 为什么我的数组中的值不通过我的全位加法器
- node.js - ../bootstrap/scss/_normalize 未找到
- android - SQLLite 更新根本不更新表(Android Studio with Kotlin)
- php - Opencart 的响应类:redirect 和 setOutput
- docker - 如何在 Dockerfile 中编写多行命令