SQL 优化慢的update语句

原语句

sql 复制代码
 UPDATE tbl_mix_trace
 SET mix_plan_id = ( SELECT p.id FROM tbl_mix_plan p WHERE p.lot_id_out= lot_id_in ),
 pro_date_in = (SELECT p.pro_date_out FROM tbl_mix_plan p WHERE p.lot_id_out = lot_id_in),
 shift_id_in = (SELECT p.shift_id_out FROM tbl_mix_plan p WHERE p.lot_id_out = lot_id_in),
 equip_id_in = (SELECT p.equip_id_out FROM tbl_mix_plan p WHERE p.lot_id_out = lot_id_in)
 where   <![CDATA[
     ( lot_id_in <> '' and lot_id_in is not NULL)
    ]]>
 and pro_date_out = #{proDateOut}
 and shift_id_out = #{shiftIdOut}

原因

  • 使用了过多的子查询,查询的还是同一个表,效率低
  • 使用join 可以避免这个问题(不同的数据库写法可能不同)

更改后的语句

sql 复制代码
UPDATE t
SET 
    t.mix_plan_id = p.id,
    t.pro_date_in = p.pro_date_out,
    t.shift_id_in = p.shift_id_out,
    t.equip_id_in = p.equip_id_out
FROM 
    tbl_mix_trace t
JOIN 
    tbl_mix_plan p ON p.lot_id_out = t.lot_id_in
WHERE 
    t.lot_id_in <> '' AND t.lot_id_in IS NOT NULL
    AND t.pro_date_out = '2024-08-14'
    AND t.shift_id_out = 1;
相关推荐
zzu123zsw1 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
小徐不徐说1 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
源码集结号2 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场2 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
啃瓜子的松鼠2 小时前
泛微OAe9-后端二开异步调用
java
Decay__3 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
秋天的怀念_David3 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放3 小时前
Python基础语法练习题(73)
java·前端·python
Wang's Blog3 小时前
Java 项目实战: 交友项目 - 环信后台发送消息测试
java·交友
用户3721574261354 小时前
Java 操作 Word 脚注和尾注:添加、读取与删除
java