数据库大神和算法大神帮忙解决一个分页问题

有两个表,一个缴费表,一个欠费表,两个表对应一个账单类进行展示。
账单类

public class bill {
    private Strng userId;

    private Short rechargeAmount;

    private Short arrearageAmount;

    private String date;

    //get和set方法省略.....
} 

缴费表

 create table recharge
 (
        user_id varchar,/用户
        amount varchar,/*缴费金额
        opt_date timestamp/*操作时间
 )

欠费表

  create table arrearage
 (
        user_id varchar,/用户
        amount varchar,/*欠费金额
        opt_date timestamp/*操作时间
 )

用分布式的数据库储存,两个表是分库储存,所以无法关联查询。要对两个表进行汇总查询并且分页,页码是pageNum,页数是pageSize。两个表独立且关联的,可以同一用户同一操作时间既有缴费记录又有欠费记录,也可以单独有单表记录(rechargeAmount或arrearageAmount记0),然后汇总到bill类后展示。
现在要根据多用户(user_id in (?,?……?,?))和操作时间(opt_date >= ?and opt_date <= ? )进行查询,按操作时间排序(order by opt_date),该如何查询?
ps:(selet … from rechage … ) union或union all )select … from arrearage …) 这样遍历两个表所有的数据进行汇总然后分页是不行的,数据量太大,数据库会超时挂掉。

这和算法有半毛钱关系?就是数据库设计而已

你先别汇总查询,先查到用户集合 List(最好是分页查询用户,因为每个用户应该都有缴费金额和欠费金额,
没有页面上缴费和欠费显示空白也对,免得后面还要分页), 然后for循环用户集合,取出每个用户的id,
然后根据用户id查询用户缴费金额与欠费金额。
List billList = 获取到用户集合方法;
List bills = new ArrayList();

Bill newBill = null;
for(Bill bill : billList){
String userId = bill.getUserId();
//根据用户id查询用户缴费金额
Strig recharge = 获取到用户缴费金额方法;
//根据用户id查询用户欠费金额
Strig arrearage = 获取到用户欠费金额方法;
newBill = new Bill();
newBill.setUserId(userId);
newBill.setRechargeAmount(recharge);
newBill.setArrearageAmount(arrearage);
bills.add(newBill);
}
这只是获取数据集合的方法,分页你可以使用你们项目里面的分页。

应该每天凌晨运行一次, 得到所有的结果放在一个报表库, 分页直接取报表库的内容就好。