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默认大小
MySQL报错:Out of sort memory, consider increasing server sort buffer size_第1张图片
我的SQL会报这个错误是因为我的一个字段是json格式,而且它的内容大小比较大,导致查出了这个限制。出现这个问题的原因也通常是带有order by的语句中某个字段的数据量较大导致的,可以自行排查。

解决方法

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

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

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

你可能感兴趣的:(报错记录,mysql,数据库)