MySQL含GROUP BY的JOIN查询失败:Error Code 2013连接中断排查
解决MySQL查询时连接中断的问题
问题根源
你的查询先对两张全表做关联,再执行分组计算,会生成大量冗余的中间数据(若每张表按县有多条记录,关联后数据量会呈指数级增长),加上没有索引导致全表扫描,服务器负载过高,最终超出MySQL连接超时阈值,触发Error Code:2013。
优化方案
1. 先聚合单表再关联(核心优化)
先分别对两张表按县聚合出所需的最大值,再进行关联,避免冗余数据的生成:
SELECT d.County_Name AS County, c.Cases, d.Deaths, d.Population2019 FROM ( SELECT County_Name, MAX(Total_Deaths) AS Deaths, MAX(Population2019) AS Population2019 FROM pennsylvaniadeathsbycounty GROUP BY County_Name ) d JOIN ( SELECT Jurisdiction, MAX(Cumulative_cases) AS Cases FROM pennsylvaniacasesbycounty GROUP BY Jurisdiction ) c ON d.County_Name = c.Jurisdiction;
2. 添加索引提升查询效率
给两张表的关联列和分组列创建索引,消除全表扫描:
-- 为死亡表的County_Name列创建索引 CREATE INDEX idx_deaths_county ON pennsylvaniadeathsbycounty(County_Name); -- 为病例表的Jurisdiction列创建索引 CREATE INDEX idx_cases_jurisdiction ON pennsylvaniacasesbycounty(Jurisdiction);
3. 临时调整连接超时参数(应急方案)
若无法修改查询或添加索引,可临时调大MySQL的连接超时时间(需管理员权限):
SET GLOBAL wait_timeout = 3600; SET GLOBAL interactive_timeout = 3600;
注:此方案仅为临时缓解,长期优化仍需依赖前两种方法。
内容的提问来源于stack exchange,提问作者Bryce Smith
相关产品推荐
相关产品推荐

