解决PageHelper分页查询Count语句耗时过长问题
当数据量很大时,执行count语句可能会导致性能问题。有几种方法可以解决这个问题:
- 使用'approximateCount'插件:PageHelper提供了一个'approximateCount'插件,它可以在执行count语句时使用近似计数方法,从而加快count的速度。你可以在配置文件中启用该插件:
<plugins>
<plugin interceptor="com.github.pagehelper.plugins.CountHelper">
<property name="approximateCount" value="true"/>
</plugin>
</plugins>
-
预先计算总数:如果你的数据量很大,但是在短时间内不会有太多的变化,你可以在应用启动时预先计算总数,并将其缓存起来。当需要分页查询时,直接使用缓存中的总数,而不需要执行count语句。
-
使用延迟加载:PageHelper默认会在第一次调用PageHelper.startPage方法时执行count语句,如果你的应用可以接受稍微延迟一些,你可以将count语句的执行延迟到第一次调用PageInfo.getTotal方法时。你可以使用PageHelper的setPageSizeZero方法来实现延迟加载:
PageHelper.startPage(pageNum, pageSize);
PageHelper.getLocalPage().setPageSizeZero(true);
List<Object> list = yourMapper.yourQueryMethod();
PageInfo<Object> pageInfo = new PageInfo<>(list);
long total = pageInfo.getTotal();
- 使用异步计算:如果你的应用允许异步操作,你可以将count语句的执行放到一个异步任务中,这样可以减少对主线程的影响。你可以使用Java的CompletableFuture或者线程池来实现异步计算。
无论使用哪种方法,都需要根据具体的场景和需求来选择。
原文地址: https://www.cveoy.top/t/topic/qmDi 著作权归作者所有。请勿转载和采集!