优化接单平台工单查询性能

This commit is contained in:
yml2213
2026-09-04 21:22:35 +08:00
parent 625df52992
commit 84a8f138d4
7 changed files with 158 additions and 82 deletions
+6 -5
View File
@@ -5,11 +5,12 @@
新增或修改 SQL 必须满足:
1. 列表查询必须有明确的分页、最大数量或日期范围;禁止无界返回历史数据。
2. `GROUP BY`、`COUNT(DISTINCT)`、窗口函数和跨表聚合必须附带 `EXPLAIN (ANALYZE, BUFFERS)` 结果。
3. 高频接口禁止在公共 `SELECT` 中叠加未必要的 LATERAL、相关子查询或全表聚合。
4. 当前页关联数据必须按当前页 ID 批量查询,不得读取用户全部历史记录再在应用层过滤。
5. 新增索引必须通过数据库 migration 提交,并说明覆盖的查询条件;大表生产索引应评估锁影响。
6. SQL 必须使用参数绑定,禁止把请求参数直接拼接到 SQL 值中。
2. 禁止在包含 `SELECT *`、JSON 宽字段、LATERAL 或详情关联的列表查询上使用 `COUNT(*) OVER()` 后再 `LIMIT/OFFSET`。窗口总数会迫使数据库在分页前处理全部候选宽记录;应使用独立窄 `COUNT`、复用同筛选条件的聚合总数,或先分页 ID 再查当前页详情。
3. `GROUP BY`、`COUNT(DISTINCT)`、窗口函数和跨表聚合必须附带 `EXPLAIN (ANALYZE, BUFFERS)` 结果。
4. 高频接口禁止在公共 `SELECT` 中叠加未必要的 LATERAL、相关子查询或全表聚合。
5. 当前页关联数据必须按当前页 ID 批量查询,不得读取用户全部历史记录再在应用层过滤。
6. 新增索引必须通过数据库 migration 提交,并说明覆盖的查询条件;大表生产索引应评估锁影响。
7. SQL 必须使用参数绑定,禁止把请求参数直接拼接到 SQL 值中。
后端 `npm run check` 会执行 `npm run check:sql`,检查关键性能防线没有被重构移除。该检查不能替代真实数据量下的 `EXPLAIN`。