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;
相关推荐
熊小猿5 分钟前
Spring Boot 的 7 大核心优势
java·spring boot·后端
摸鱼的老谭7 分钟前
Java学习之旅第二季-13:方法重写
java·学习·方法重写
云灬沙7 分钟前
IDEA2025无法更新使用Terminal控制台
java·intellij-idea·idea·intellij idea
Yield & Allure8 分钟前
IDEA在plugins里搜不到mybatisx插件的解决方法
java·ide·intellij-idea
yunmi_12 分钟前
安全框架 SpringSecurity 入门(超详细,IDEA2024)
java·spring boot·spring·junit·maven·mybatis·spring security
孤独斗士12 分钟前
解决Intellij IDEA控制台,logger.info(),system.out.println()等中文乱码问题
java·ide·intellij-idea
shepherd11117 分钟前
JDK 8钉子户进阶指南:十年坚守,终迎Java 21升级盛宴!
java·后端·面试
SimonKing37 分钟前
SpringBoot集成:5分钟实现HTML转PDF功能
java·后端·程序员