MyBatis Plus 复杂报表场景优化实录:深分页、count 之痛与批量操作的真相
摘要:MyBatis Plus 在 CRUD 场景几乎开箱即用,但复杂报表/管理后台场景有四个高频翻车点:深分页拖库、分页插件的 count 性能、saveBatch 的伪批量、大结果集 OOM。这篇基于管理后台报表项目的优化实录,把四个问题各自的成因和工程解法讲透——包括一个反直觉结论:很多报表该写 XML 手写 SQL,而不是硬用 Wrapper。
关键词:MyBatis Plus、深分页、批量插入、ResultHandler、报表优化
适合人群:用 MP 做管理后台/报表的 Java 开发
一、翻车点 1:分页插件在深分页下的双重慢
MP 分页插件(PaginationInnerInterceptor)执行LIMIT 100000, 20时的两个性能问题:
- 深分页本身:MySQL 取前 100020 条丢弃(同系列《RDS 慢 SQL 治理》详述)
- count 查询:插件默认先执行
SELECT COUNT(*),复杂 JOIN/WHERE 下这个 count 本身就是一条大 SQL——每翻一页付两次代价
解法组合:
// 1. count 关闭或优化Page<T>page=newPage<>(pageNo,20,false);// 按需关闭 count