最近发现项目(前后端分离)导出报表过慢,后来发现导出结果集其实很快(几秒),只是查询很慢(几十秒甚至几分钟),但是报表太多了,全是大的 sql 语句
所以我在想是否可以在不修改业务代码的情况下提高导出效率,所以我准备用多线程实现。项目用的 MyBatis,我的想法:
是否可以写个对 Executor.class 的 query 方法的拦截,
@
Intercepts({@Signature(type = Executor.class, method = "query",
args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class})
})
然后把大 sql 先 count 下计算下总数,如果超过 10 万行我就 limit 方式分解多条 sql, 然后多个线程去跑,最后把结果集合并。
老哥们觉得如何,是否有啥 bug 呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/689862
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.