Java线程池多线程查询数据库提高查询效率
需求
公司数据统计报表查询,几张大表关联查询,包含跨库查询,数据联查,数据过滤,数据统计。
问题
主表数据1
主表数据2
…
统计数据1
统计数据2
…
数据
数据
数据
数据
报表结构是主表数据+统计数据,只查主表数据速度很快,统计数据需要跨库联查,且表数据量大,拖慢了速度。
一开始的做法是,每次分页请求都先获取主表list,再foreach主表list,根据主表字段去查询统计数据并进行计算,再合并到主表进行返回,查询速度不理想。
分页查响应时间=1次主表查询时间+10次统计数据查询时间
思路
复杂的报表数据统计不应全部由DB层面去解决,而是SQL仅负责数据过滤,返回统计所需的字段,SQL尽量简单高效,service层拿到DB返回的结果集,由代码层面去进行较为复杂的数据合并与统计。