UPDATE APM2022.pt_organization a SET a.MEMO =( SELECT COUNT( 1 ) FROM APM2022.PT_USER u LEFT JOIN APM2022.pt_organization o ON o.id = u.org_id WHERE ( o."PATH" LIKE CONCAT( '%', a."PATH" + a.ID, '%' ) OR u.org_id = a.id ) AND u.type != 'adminRole_admin' AND u.type != 'adminRole_audit' AND u.type != 'adminRole_sec' ) 优化这段SQl
时间: 2024-04-05 17:34:36 浏览: 100
可以尝试以下优化:
1. 使用EXISTS子查询代替COUNT,因为只需要判断是否存在符合条件的结果,而不需要具体的数量。
2. 尽量避免在WHERE子句中使用函数,可以将条件提取到子查询中。
3. 将LEFT JOIN改为INNER JOIN,因为在WHERE子句中已经限制了u表和o表的关联条件,所以不需要使用左连接。
改进后的SQL语句如下:
UPDATE APM2022.pt_organization a
SET a.MEMO = (
SELECT 1
FROM APM2022.PT_USER u
INNER JOIN APM2022.pt_organization o ON o.id = u.org_id
WHERE (o."PATH" LIKE CONCAT('%', a."PATH" + a.ID, '%') OR u.org_id = a.id)
AND u.type NOT IN ('adminRole_admin', 'adminRole_audit', 'adminRole_sec')
LIMIT 1
);
注意:请根据实际需求进行测试和调整。
阅读全文