分享自研实现的多数据源(支持同DB不同表、跨DB表、内存数据、外部系统数据等)分页查询工具类实现原理及使用

Java60

思考:

提起分页查询,想必任何一个开发人员(不论是新手还是老手)都能快速编码实现,实现原理再简单不过,无非就是写一条SELECT查询的SQL语句,ORDER BY分页排序的字段, 再结合limit (页码-1),每页记录数,这样即可返回指定页码的分页记录,类似SQL如下所示:

select * from table where 查询条件 order by id limit 100,100; -- 这里假设是第2页(limit 第1个值从0开始),每页100条

那如果是想将多张表的记录合并一起进行分页查询,我们又该如何实现呢?我估计稍微有点经验的开发人员可能会立马举一反三,想到了通过UNION 多张表的方式来实现分页查询,类似SQL如下所示:

select * from
(select id,col1,col2,col3 from table1 where 查询条件
union all
select id,cola as col1,colb as col2,colc as col3 from table2 where 查询条件
) as t
order by t.id limit 100,100; -- 这里假设是第2页(limit 第1个值从0开始),每页100条

这样实现有没有问题呢?我觉得如果是UNION的多张小表(即:数据量相对较小)那么这样实现成本最低最有效果,肯定是OK的,但如果UNION的多张表是一些大表(即:数据量相对较大,如:100W+)且有些表的查询条件中的查询字段不一定是有索引的,那么就会存在严重的查询性能问题,另外如果UNION的表过多,即使不都是大表也仍然存在查询性能问题,而且查询性能随着UNION的表的数量增加查询性能而降低,导致无法扩展。

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长