mysql分库之后如何分页查询

mysql分库之后如何分页查询

前言:

当我们的应用在经历时间的洗礼之后,mysql数据库势必会遇到数据量过大,需要分表分库,当然,我们应该一开始就进行这个操作!!

切入正题

按时间水表无限分表

例如:订单表我们对他进行水平分表,一时间对位订单号的头部 如:20210101112233321654,其中20210101112233部分为当前时间精确到秒,321654是我们的随机数,构造出的订单号作为分表标志,然后我们假设,一个月一张表,那么上述的订单号应该在 order_202101这张表中,当我们需要取出这条记录的时候,我们只要在代码中分析这个订单号的时间部分,就可以定位到表所在。当然这样的表,在库中有很多 10张20张更多!!

问题浮现

现在有个问题,如果我们的管理后台要按条件查询订单,而且!!!领导说了,你还必须有分页!!!!!!!!!怎么办?

哎!!这么无礼的要求满足他吧!

单表分页的时候,我们使用limit设置步长和起始位置 limit(offset,start)
可是现在有20张表,怎么办?

1,首先我们应该按照条件查询出20张表所有的记录条数,一张一张的查询(如果有时间作为条件就好了!-,-),然后全部相加就是总记录数。

2,有了总记录数,就有了总页数,然后,根据传过来的page,又因为我们知道每张表的记录数,所以我们可以精确的确定对应的offset数量的记录都在那几张表中,如:page=5,offset=10, 如果第一张表的记录数是32,第二章的记录数是40,那么我们只需要查询第二张表就可以实现,10*(5-1)=40,start= 40-32=8 所以,第五页的记录数应该是 select from table2 limit(offset,8),这样,我们就可以查询出所有page=5的数据了。

3,20张表!!!!!每次都查询每张表的记录数,数据库要死的!!!!!!那怎么办类?首先,我们知道最新的表是动态的,但是之前的月份或者日期是静态的不会在增加新的,所以可以将最新以外的表的对应条件记录数进行redis(nosql)进行缓存,这样 我们只有在第一次进行查询的时候查询所有表的记录数,其他的时间下,我们只需要在需要显示的表中进行查询就可以了。

ps:如果10条记录在两张不同的表中,使用递归进行查询就可以了,知道满足我们的条件为止!!!!!!当然了,即使经过了2年,有了分库,也可以用相同的原理进行查询。

好了,下次聊聊分表的下拉加载!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值