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;
相关推荐
张伯毅8 分钟前
Flink SQL 将kafka topic的数据写到另外一个topic里面
sql·flink·kafka
头发那是一根不剩了10 分钟前
怎么用idea分析hprof文件定位JVM内存问题
java·jvm
让代码飞~15 分钟前
maven项目, idea右上角一直显示gradle的同步标识, 如何去掉
java·maven·intellij-idea
张扬飞舞16 分钟前
IntelliJ IDEA克隆项目失败的解决方法
java·ide·intellij-idea
一只码代码的章鱼27 分钟前
spring -MVC-02
java·spring·mvc
ziyue757534 分钟前
idea启用lombok
java·intellij-idea·idea·lombok·软件
淡定是个好东西40 分钟前
springboot连接高斯数据库(GaussDB)踩坑指南
数据库·gaussdb
追风赶月、43 分钟前
【Redis】哨兵(Sentinel)机制
数据库·redis·sentinel
tmacfrank1 小时前
Java 原生网络编程(BIO | NIO | Reactor 模式)
java·开发语言·网络
悟能不能悟1 小时前
mysql的not exists走索引吗
数据库·mysql