MySQL-跨N库分页

方法一:全局视野法

(1)SQL改写,将

order by time offset X limit Y;

改写成

order by time offset 0 limit X+Y;

(2)服务层对得到的N*(X+Y)条数据进行内存排序,内存排序后再取偏移量X后的Y条记录;

这种方法随着翻页的进行,性能越来越低。

方法二:禁止跳页查询法

(1)用正常的方法取得第一页数据,并得到第一页记录的time_max;

(2)每次翻页,将

order by time offset X limit Y;

改写成

order by time where time>$time_max limit Y;

以保证每次只返回一页数据,性能为常量。

方法三:允许模糊数据法

(1)SQL查询改写,将

order by time offset X limit Y;

改写成

order by time offset X/N limit Y/N;

性能很高,但拼接的结果集不精准。

方法四:二次查询法

(1)SQL改写,将

order by time offset X limit Y;

改写成

order by time offset X/N limit Y;

(2)多页返回,找到最小值time_min;

(3)between二次查询

order by time between time_min andtime_i_max;

(4)设置虚拟time_min,找到time_min在各个分库的offset,从而得到time_min在全局的offset;

(5)得到了time_min在全局的offset,自然得到了全局的offset X limit Y;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、需求缘起 分页需求 互联网很多业务都有分页拉取数据的需求,例如: (1)微信消息过多时,拉取第N页消息 (2)...
    duzhongli阅读 513评论 0赞 3
  • 互联网很多业务都有分页拉取数据的需求,业务中经常按照时间time来排序order by,在数据量不大时,可以通过在...
    米刀灵阅读 2,359评论 0赞 7
  • 微信公共号 [架构师之路] 上看到一篇文章 业界难题-“跨库分页”的四种方案,学习了下,一些笔记。 分页需求 互联...
    专职跑龙套阅读 2,438评论 1赞 4
  • 一.分库分表的原因 我个人觉得原因其实很简单:1.随着单库中的数据量越来越大,相应的,查询所需要的时间也越来越多,...
    1994_老叶阅读 8,982评论 0赞 15
  • 夜风吹,吹疼谁的眼 奔跑,跑过旷野,跑赢风 跑赢昨天的那个自己 灯亮了,闪烁谁的脸 歌唱,唱到天明,唱亮心 唱完过...
    HR_欣姐阅读 180评论 1赞 4

友情链接更多精彩内容