数据库分库分页查询方式
一、业务场景
当系统中数据量过于庞大时,为了提升系统的性能,考虑对数据库进行分库处理;
二、分库依据
可根据业务id进行取模分库,例如uid,orderid等等
三、分页查询
当对多个数据库中的数据进行分页查询时,首先根据字段进行排序,一般是时间time
四、分页查询方式
一般我们的分页查询语句是:select * from T order by time desc offset 5 limit 5; 表示根据time排序从第二页查,每页大小是5条数据,因为查询的是多个数据库,例如 db1 和db2, 显然,上面的sql不能满足全局搜索的视野,下面介绍几种方式来实现多数据库下的分页查询方案;
1.全局搜索,对每个库的数据都进行 select * from T order by time desc offset 5 limit 5; 查询,对查询出来的数据进行重新排序,再获取对应页码的数据;缺点,查询大页码的时候数据重组浪费性能;
2.禁止跳页查询,每次查询出当前页的最大值来作为下一页查询的标签,每个库查询的时候都从该标签开始往后查数据,然后再对查询出的数据进行从排序,取出对应页码的数据;缺点,不能进行跳页查询,优点,可以提升查询性能;
3.二次查询法,二次查询分为两次查询,其思想是找出多数据库中的一个标量,从而来确定该标量在三个库中的具体位置(虚拟的),从而来实现分页查询的具体页码数据;举例:还是上面的数据,比如按uid取模分到两个数据库中,那么sql中,offset为5/2=2,即每个库第一次执行的sql变为select * from T order by time desc offset 2 limit 5 ;这样得到两个库中的数据,每个库各5条,找出这个两个库中的最小的值记号它在数据库中的行数,这个行数就是前面需要的标量,用这个标量去第二个库中比较在第二个库中的位置(虚拟的),从而来确定该标量再两个库中虚拟的位置,再结合实际的offset=5,进行数据补位,查到后面对应页码的数据,优点,大数据量下提高性能,支持跳页查询,缺点,查两次库,