# 系统类与阀类装配任务查询性能优化 ## 变更信息 - 变更日期:2026-07-25 - 变更环境:正式环境 `YL_MESDB` - 变更范围:系统类装配任务查询、阀类装配任务查询 - 业务数据变更:无 - 前端文件变更:系统类、阀类页面首屏分页和单元格按需编辑 - IIS 文件变更:正式前端尚未部署,已生成待发布静态包 ## 问题定位 原查询的主要耗时来自以下部分: 1. `View_生产工时视图` 在同一次查询中被重复扫描和分组四次。 2. 流程告警、装配在岗人员、质检在岗人员使用逐行相关子查询,结果行数增加时重复访问基础表。 3. SAP 关联数据在筛选候选任务前进行聚合,扩大了查询工作量。 4. 多个高频连接字段缺少适合当前访问方式的非聚集索引。 正式环境优化前缓存统计: | 查询 | 平均耗时 | 平均逻辑读 | | --- | ---: | ---: | | 系统类装配任务 | 约 4.16 秒 | 约 142.7 万页 | | 阀类装配任务 | 约 4.47 秒 | 约 154.7 万页 | ## 优化内容 1. 新增共享核心过程 `dbo.计划排产_装配任务查询_核心`,两个原过程保留原名称和参数,仅作为分类入口。 2. 先将符合条件的任务写入临时表,再对工时、流程、在岗人员、质检和 SAP 数据进行候选集范围内的汇总。 3. 将 `View_生产工时视图` 的四次扫描合并为一次,任务工时和合同工时在一次聚合中计算。 4. 保留合同工时修复,合同维度继续使用 `订单合同号`。 5. 将动态拼接条件改为参数化筛选,降低重复编译和字符串条件风险。 6. 新增 5 个辅助索引: - `物料基础数据_零件图纸.IX_零件图纸_num` - `车间生产管理工艺_零件生产工艺_工艺库.IX_工艺库_订单_顺序` - `YL_质量检验_质检记录.IX_质检记录_质检类型_计划号` - `登录基础数据_人员信息.IX_人员信息_姓名_班组` - `流程表.IX_流程表_关联计划_流程` ## 验证结果 完整结果集逐列哈希比对结果一致: | 查询 | 优化前 | 优化后 | 结果行数 | 数据一致性 | | --- | ---: | ---: | ---: | --- | | 系统类默认查询 | 3500 ms | 681 ms | 55 | 一致 | | 阀类默认查询 | 6415 ms | 1316 ms | 283 | 一致 | 筛选条件回归均通过,包括指定订单、指定合同和未完成状态;其中阀类未完成查询由 `23431 ms` 降至 `623 ms`。 正式接口按前端实际分页参数回归: | 接口查询 | HTTP 状态 | 返回数据 | 接口耗时 | | --- | ---: | ---: | ---: | | 系统类 | 200 | 20/55 行 | 1201 ms | | 阀类 | 200 | 20/283 行 | 940 ms | 部署后累计调用统计在 2026-07-25 最终核验时为: | 查询 | 调用次数 | 平均耗时 | 平均逻辑读 | | --- | ---: | ---: | ---: | | 系统类装配任务 | 13 | 775.02 ms | 397782 页 | | 阀类装配任务 | 13 | 1104.29 ms | 412203 页 | 合同工时非零数据复核:系统类合同装配工时 34 行、合同质检工时 20 行;阀类合同装配工时 97 行、合同质检工时 34 行。 ## 部署与回滚 - 过程部署脚本:`db_backups/optimize_install_task_queries_20260725.sql` - 过程回滚脚本:`db_backups/rollback_install_task_queries_20260725.sql` - 索引部署脚本:`db_backups/optimize_install_task_query_indexes_20260725.sql` - 索引回滚脚本:`db_backups/rollback_install_task_query_indexes_20260725.sql` - 线上精确备份过程: - `dbo.计划排产_系统类任务查询_优化前_20260725` - `dbo.计划排产_阀类任务查询_优化前_20260725` 建议观察一个业务周期后再决定是否删除两个优化前备份过程。导出过程不在本次变更范围内。 ## 首屏渲染二次优化 用户反馈数据库优化后页面体感仍需数秒。按正式接口连续测量,系统类通常为 `0.70-0.99` 秒,阀类通常为 `0.88-1.14` 秒;剩余等待主要发生在浏览器渲染阶段。原页面默认请求 100 行,并为每一行同时创建日期选择器、多选下拉框和预算数字输入框。 本次前端调整如下: 1. 默认分页由 100 行改为 20 行,可选 20、50、100 行。 2. 修复分页控件使用 `donepageSize/donepageCurrent`、请求却使用 `pageSize/pageCurrent` 的状态错配。 3. 日期、二次派工和预算字段默认使用文本显示,点击对应单元格后才创建编辑控件。 4. 保留原保存过程、日期修改过程、二次派工过程和预算计算公式,不改变业务数据口径。 正式接口 20 行回归结果: | 查询 | 接口耗时范围 | 返回行数 | 响应字符数 | | --- | ---: | ---: | ---: | | 系统类 | 696-987 ms | 20/55 | 19670 | | 阀类 | 876-1143 ms | 20/260 | 18672 | 相较原 100 行响应,系统类响应体由约 52825 字符降至 19670 字符,阀类由约 93429 字符降至 18672 字符;同时首屏不再批量创建各行编辑控件。 曾在正式库事务内验证“预展开合同订单后连接工时视图”和 3 个筛选索引。完整结果哈希一致,但系统类接口由约 0.82 秒增加到约 1.09 秒,阀类约 1.04 秒无明显收益,因此已完整回滚并清理临时过程和索引,未纳入正式方案。