1.5 KiB
1.5 KiB
当前排查结论
已确认事实
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.4shydrateAppointmentStats/hydrateOrderAndAmountStats通常约0.08s ~ 0.13sinclude_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/重复聚合