Mysql分表后如何实现排序分页查询?

比如有一张订单表,订单id是通过雪花算法生成的,将其作为分片字段进行分表,假如分5张表,每个订单被分到第(订单id % 5 + 1)张表中,现在需要通过对订单的生成时间进行降序排序,并分页展示,需如何实现?

个人查阅资料后了解其中两种方法:

  1. 一种是比如每页10条记录,查询第三页的数据,即在单表中是limit 20,10,那么分表之后,需要每个表都查询前30条记录,总的就是150条记录,在内存中对这150条记录进行排序,取第21 - 第30条记录
  2. 另一种是禁止跳页查询,通过上一页的最大订单生成时间作为查询条件来查询,如 where ctime > 上一页的最大订单生成时间 limit 10

但是这两种方法都有缺陷,第一种随着页数的增加,查询的效率以及占用的内存将会随之增加,比如要查询第10页的数据,那么每个表都需要查询前100条的记录,总的就是500条并需要进行排序。第二种的缺点就是无法跳页查询。

是否存在一种方案可以不查询那么多数据,也可以跳页查询?


回答:

不存在. 使用了分表的优点, 就要接受它的缺点.


回答:

你的表结构应该都是一样的,可以通过多表查询的方式解决,一次性查询五张表。

我不明白你为什么不使用分区呢?既有分表的优点,维护还方便,又不需要自己控制,同时能够避免你想联表查询的分页问题。

以上是 Mysql分表后如何实现排序分页查询? 的全部内容, 来源链接: utcz.com/p/944757.html

回到顶部