该 SQL 查询语句比较复杂,可以考虑优化如下:

  1. 对于子查询中的 LEFT JOIN 子句,可以使用 EXISTS 子句代替,这样可以避免在子查询中产生过多冗余数据。

  2. 子查询中的 GROUP BY 子句可以省略,因为子查询中只取 ai.instance_id,这样可以提高查询效率。

  3. 对于 WHERE 子句中的条件,可以将其移动到子查询中,这样可以减少主查询的数据量。

优化后的 SQL 查询语句如下:

SELECT COUNT(1) FROM approval_instance ai 
WHERE ai.draft_flag = 1 
  AND ai.del_flag = 0 
  AND ai.final_status = 0 
  AND EXISTS (
    SELECT 1 FROM approval_link_member alm 
    LEFT JOIN approval_link al ON al.link_id = alm.link_id 
    WHERE al.del_flag = 0 
      AND alm.del_flag = 0 
      AND alm.instance_id = ai.instance_id 
      AND alm.staff_id = '03f51441f9c0467baaa002923080baa5' 
      AND alm.status = '0' 
      AND alm.status <> '00'
  );
优化复杂 SQL 查询语句:使用 EXISTS 子句替换 LEFT JOIN 并简化查询

原文地址: https://www.cveoy.top/t/topic/nh8N 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录