You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写更高效的MySQL查询以统计承包商对应表单提交数量

MySQL查询性能优化方案

1. 新增必要索引

当前查询耗时过长的核心原因是 form_submissions 表用于关联的 contractor_id 字段没有建立索引,每次关联都要全表扫描提交表的所有数据。
执行以下语句新增索引即可:

-- 普通索引即可满足需求,无需回表即可完成统计
CREATE INDEX idx_submissions_contractor_id ON form_submissions(contractor_id);

2. 调整SQL查询逻辑

原SQL的执行逻辑是先关联两张表再分组统计,会产生大量临时关联数据,改为先统计子表数据再关联主表的逻辑,大幅减少关联时的数据量:

SELECT 
  a.id, 
  a.contractor, 
  IFNULL(b.submission_count, 0) AS submission_count
FROM `contractorList` a
LEFT JOIN (
  SELECT contractor_id, COUNT(*) AS submission_count
  FROM form_submissions
  GROUP BY contractor_id
) b ON a.id = b.contractor_id
ORDER BY a.contractor;

优化逻辑说明:

  • 子查询仅对form_submissions表做一次分组统计,最多输出1200条结果(和承包商总数量一致)
  • 主表仅需要和这1200条统计结果做关联,相比原写法关联后再统计动辄数万/数十万条数据的逻辑,性能提升非常明显
  • 搭配上面新增的索引,子查询可以直接走索引完成统计,不需要访问表的实际数据,速度更快

效果预期

两个优化措施配合使用,原查询数分钟的耗时可以降低到毫秒级,完全满足需求。


内容的提问来源于stack exchange,提问作者Zak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:36:04