# 当前排查结论 ## 已确认事实 * `stats.conversion/overview` 的主实现位于 `server/app/adminapi/logic/stats/ConversionLogic.php` * 历史日志 `server/runtime/adminapi/log/202604/22.log` 中存在 MySQL 1064: `near '( q.follow_admin_ids, '$[*]' COLUMNS (...)'` * 当前 `ConversionLogic.php` 中已经搜索不到 `JSON_TABLE`,说明旧问题可能已被部分替换 ## 当前文件中的 MySQL 8 风险点 * 多处 `fieldRaw(...) + group(...)` 聚合 * 多处 `whereRaw(...)` * 使用保留字表名 `order` * `include_filters=1` 会额外触发筛选项构建,可能带出更多 SQL 路径 ## 已观察到的性能热点 * `server/runtime/adminapi/log/202604/22.log` 中: * `hydrateFanStats cost` 多次达到 `0.7s ~ 2.4s` * `hydrateAppointmentStats` / `hydrateOrderAndAmountStats` 通常约 `0.08s ~ 0.13s` * `include_filters=1` 时 `buildFilterOptions -> DiagnosisLogic::getAssistants` 曾达到 `18s+` * 因此本次 SQL 优化应优先关注: * `ConversionLogic::hydrateFanStats()` * `ConversionLogic::buildFilterOptions()` 触发的医助筛选项路径 ## 本次修复策略 * 以 `ConversionLogic.php` 为主;若 `include_filters=1` 的真实瓶颈仍在 `DiagnosisLogic::getAssistants()`,允许一并做局部 SQL 优化 * 优先处理: * `ONLY_FULL_GROUP_BY` 风险 * 原生 SQL / NULL 比较兼容性 * Builder 可替换的 `whereRaw` * 与 `order` 表相关的潜在保留字问题 * 明确慢点 SQL 的结构优化,避免全表扫描/不必要 join/重复聚合