SELECT mo.ORGNAME as departmentName, mp.* FROM mxk_posts mp LEFT JOIN mxk_organizations mo on mp.DEPARTMENTID = mo.id where mp.instid = #{instId} and mo.instid = #{instId} and mp.id not in (SELECT POSTID FROM mxk_userinfo_posts where userId = #{userId}) and mp.id != (SELECT JOBTITLE FROM mxk_userinfo where id = #{userId}) 优化下这个sql
时间: 2024-02-10 21:24:08 浏览: 64
个性化修改系统镜像ISO.pdf
为了优化这个 SQL 查询,可以考虑以下几点:
1. 索引优:确保 `mxk_posts` 表的 `id` 字段和 `mxk_organizations`的 `instid` 字段都有引,以提高查询效率。
2. 子查询优化:将子查询转换为连接查询,可以提高性能。可以使用 `LEFT JOIN` 来连接 `mxk_userinfo_posts` 表和 `mxk_userinfo` 表。
3. 使用 EXISTS 替代 NOT IN:将 `mp.id not in (SELECT POSTID FROM mxk_userinfo_posts where userId = #{userId})` 改写为 EXISTS 子查询,可以提高查询性能。
4. 简化条件:根据实际需求,简化条件,去除不必要的条件判断,以减少查询的复杂性。
下面是优化后的 SQL 查询:
```sql
SELECT
mo.ORGNAME AS departmentName,
mp.*
FROM
mxk_posts mp
LEFT JOIN mxk_organizations mo ON mp.DEPARTMENTID = mo.id
WHERE
mp.instid = #{instId}
AND mo.instid = #{instId}
AND NOT EXISTS (SELECT 1 FROM mxk_userinfo_posts WHERE userId = #{userId} AND POSTID = mp.id)
AND mp.id != (SELECT JOBTITLE FROM mxk_userinfo WHERE id = #{userId})
```
请根据实际情况替换 `#{instId}` 和 `#{userId}` 为具体的参数值。
阅读全文