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;
相关推荐
纪莫4 分钟前
技术面:如何解决缓存和数据库一致性的问题?
数据库·redis·java面试⑧股
阿里云大数据AI技术7 分钟前
MaxCompute SQL AI:让 SQL 成为你的 AI 语言
人工智能·sql
阿里云大数据AI技术16 分钟前
MaxCompute SQL AI:让SQL成为你的AI语言
人工智能·sql
_院长大人_17 分钟前
Spring Boot 客户端设计示例:自动刷新 Token 并重试接口调用(Springboot Starter 封装)
java·spring boot·后端
卷到起飞的数分23 分钟前
19.Spring Boot原理1
java·spring boot·后端
消失的旧时光-194326 分钟前
彻底理解 synchronized:实例锁、类锁与自定义锁的原理和最佳实践
java·开发语言
番茄你个西红432 分钟前
安装KingbaseES时服务器swap的设置
linux·数据库
开源之眼36 分钟前
github star 较多的Java双亲委派机制【类加载的核心内容加星】
java
编程火箭车38 分钟前
【Java SE 基础学习打卡】19 运算符(中)
java·java入门·运算符·编程基础·赋值运算符·复合赋值·自增自减
是一个Bug38 分钟前
Spring事件监听器源码深度解析
java·数据库·spring