1.遇到的问题
本次查询的数据是一个视图,查询的数据量也比较大,整体有百万数据。
错误提示:
2023-11-02 07:55:52 [http-nio-11605-exec-3] ERROR c.a.druid.filter.stat.StatFilter [] [] - slow sql 6568 millis. SELECT COUNT(1) FROM (
2.尝试方法
经过查询,对大量数据进行处理时,为防止内存泄漏情况发生,也可以采用游标方式进行数据查询处理。这种处理方式比常规查询要快很多。但是对我这个没有效果。
当查询百万级的数据的时候,还可以使用游标方式进行数据查询处理,不仅可以节省内存的消耗,而且还不需要一次性取出所有数据,可以进行逐条处理或逐条取出部分批量处理。一次查询指定 fetchSize 的数据,直到把数据全部处理完。
Mybatis 的处理加了两个注解:@Options 和 @ResultType
游标查询
@Mapper
public interface BigDataSearchMapper extends BaseMapper {
// 方式一 多次获取,一次多行
@Select("SELECT bds.* FROM big_data_search bds ${ew.customSqlSegment} ")
@Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000000)
Page pageList(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper);
3.解决办法
优化视图中的sql,增加索引解决问题。