Files
zyt/.trellis/tasks/archive/2026-05/05-07-conversion-overview-mysql8/research/current-findings.md
T

1.5 KiB
Raw Blame History

当前排查结论

已确认事实

  • 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=1buildFilterOptions -> 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/重复聚合