数据库水平分表后,分页查询如何实现?
两种解决方案
1.多库分别按条件查询,查询后按照条件重新筛选,筛选后选择对应的数据,同时记录好这次每个库的最大取值,作为下一页的条件
优点:查询简单,
缺点:该方案只能应对不跳页的场景的实现方案
2.计算偏移量方法
第一步:根据当前页和每页条数,计算偏移量
eg:查询第200页,每页5条的数据 SQL语句为select * from T limit 5 offset 1000;
这里的1000为总偏移量,即200*5;
如果分表为两张,则每张表的偏移量为500,三张表,即为333.
第二步:根据每张表的偏移量查询每张表的分页数据select * from T limit 200 offset 333;
假设查询结果如下
第三步:根据结果找出上面每个查询结果的最大值和最小值,每个结果的最小值比较,找出最小值min(1487501123
),每个结果的最大值max作为查询的自己的查询最大值,作为条件,select
*
from
T
where
time
between
min
and
m