Files

36 lines
1.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 当前排查结论
## 已确认事实
* `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/重复聚合