MySQL报错:Out of sort memory, consider increasing server sort buffer size

报错内容

### Error querying database.  Cause: java.sql.SQLException: Out of sort memory, consider increasing server sort buffer size
### The error may exist in class path resource [mapper/ProjectCaseReportMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select pcr.id, pcr.finally_report_id,pcr.username,pcr.project_name,pcr.tag_name,pcr.status,pcr.exe_time,pcr.create_time, sc.case_title as caseName, sc.case_type as caseType, sc.case_num as caseNum from project_case_report pcr left join script_case sc on pcr.case_id = sc.id WHERE  finally_report_id = 'df47149a698d4508b42593e778af8a08'  order by pcr.create_time desc  LIMIT 10

报错原因

在 order by 时 sort_buffer_size 超出MySQL默认大小
在这里插入图片描述
我的SQL会报这个错误是因为我的一个字段是json格式,而且它的内容大小比较大,导致查出了这个限制。出现这个问题的原因也通常是带有order by的语句中某个字段的数据量较大导致的,可以自行排查。

解决方法

网上有很多方法都是告诉我们如何修改这个限制值,具体修改它的方法自行查询吧,因为我不建议大家修改,出现这个问题说明我们的SQL不是很合适,应该想办法优化我们的SQL。下面是我的解决过程。

  1. 找到数据较大字段
  2. 优化SQL,初次 order by 查询时不查询该字段,先获取它的ID和其他信息
  3. 单独增加一个接口通过ID查询该字段

我将SQL重新编写,把导致问题的大字段放到单独的一个接口进行查询,这样可以加快首次 order by 查询接口的速度同时避免了不可预知的sort_buffer_size限制报错,也可以根据id快速查询大字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@胡海龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值