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;
相关推荐
hh9503 分钟前
Agent Plan x DeepSeek Harness:Agent 供应链安全与第三方插件审计
java·开发语言·安全·agent plan·adg成都社区·adg社区
吴声子夜歌10 分钟前
Java面试——HBase原理及应用
java·面试·hbase
浪兎兎15 分钟前
【Java Web】Servlet + JSP 笔记
java·前端·servlet
吴声子夜歌38 分钟前
Java面试——ElasticSearch原理及应用
java·面试·es
lhldsg40 分钟前
家政派单系统开发实战:从需求分析到智能调度全流程指南
java·junit·小程序·uni-app·需求分析
吴声子夜歌40 分钟前
Java面试——Spring原理及应用(一)
java·spring·面试
灰阳阳1 小时前
Docker-数据卷命令解析
java·docker·eureka
晓晓_za8986681 小时前
开源 GEO 优化源码二次开发:贴牌改造与业务模块扩展实践
java·运维·服务器·开发语言·性能优化·开源
别慌,让我先缓缓1 小时前
Java入门:从编写到运行第一步
java