我的场景是很多条件查询,其中有一个条件是是否筛选A字段长度大于10的
我有两个想法:1.我的分页查询和条件构造都是用mybatis plus完成的,计算“内容”字段content长度的话,就只能拼接sql语句:where charlength(content)> 10,但是这样就导致了整个构造的条件最终不走索引,于是我就想到了第二个方法
2.先分页查询,然后再对分页查询出来的数据进行筛选,filter(a->a.getContent.length()>10)collect(Collectors.toList()),但是这样就有一个问题,就比如说,分页查询出来后,当前页是第一页,分页的size是10,筛选掉content小于10的有8条数据,那最终第一页就只有2条数据了
所以我想请教一下,有没有分页查询后→筛选数据后-→再按size分页/或者说,让筛选后的数据往前挤
1、是否可以再加一个字段,存储content的长度?这样分页问题就解决了;
2、charcontent(content)只有这一个条件吗?没有时间,ID之类的其它条件去过滤吗?
3、按照第二种方案,先查询后在内存里面做分页,那这种肯定不可取
4、是否可以对这种数据先做处理?正常查询是越简单越好
分页查询后→筛选数据后
这合理?而且
where charlength(content)> 10怎么就不走索引呢?
1、可以 先查询出全部数据
2、通过stream 流得到一个 新的list
3、再将这个 list 用stream流进行分页