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;
相关推荐
W001hhh1 分钟前
数据库实训Day004上午
数据库
毕设源码-赖学姐24 分钟前
【开题答辩全过程】以 高校人才培养方案管理系统的设计与实现为例,包含答辩的问题和答案
java
funfan051731 分钟前
【运维】MySQL数据库全量备份与恢复实战指南:从入门到精通
运维·数据库·mysql
+VX:Fegn089534 分钟前
计算机毕业设计|基于springboot + vue在线音乐播放系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
一起努力啊~36 分钟前
算法刷题-二分查找
java·数据结构·算法
小途软件39 分钟前
高校宿舍访客预约管理平台开发
java·人工智能·pytorch·python·深度学习·语言模型
J_liaty44 分钟前
Java版本演进:从JDK 8到JDK 21的特性革命与对比分析
java·开发语言·jdk
tq10861 小时前
通用数据引用表示法:基于协议-URI-JSONPath的简洁数据定位规范
数据库
+VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue律师咨询系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
manuel_897571 小时前
六 系统安全
网络·数据库·系统安全