一.服务接口业务SQL开发原则
1.**能少 JOIN 就少 JOIN** | 只在实际用到该表字段做筛选或展示时才 JOIN,否则不 JOIN
- **先过滤再关联** | 尽量在单表上先完成过滤、排序、分页,再对外做关联,避免"全表 JOIN 后再 LIMIT"
3.**权限/存在性用 EXISTS** | 判断"是否有权限""是否在某个集合"时,优先用 EXISTS + 索引,少用 `IN (子查询)`
4.**COUNT 与 LIST 同源** | 分页的 count 和 list 的过滤条件、JOIN 策略要一致,且 count 尽量更轻(少 JOIN、少排序)
count 只关心"符合条件的行数",不关心其它表的展示字段。若 count 和 list 用同一套 SQL(含多表 JOIN),会多做一次大结果集的 JOIN 和排序,非常浪费。
5.范围过滤:用 EXISTS 替代 IN (子查询)
不推荐:IN (子查询) 易产生大结果集
and dataset.id in (select dataset_id from test where ex_account = #{params.exAccount})
-- 推荐:EXISTS,便于走索引
and exists (
select 1 from test p
where p.dataset_id = dataset.id and p.ex_account = #{params.exAccount}
)
```