需求:ORDER BY x OFFSET 10000 LIMIT 4; 如何在分库下实现(假设分3库)
步骤一、查询改写: ORDER BY x OFFSET3333LIMIT 4
[4,7,9,10] <= 1库返回
[3,5,6,7] <= 2库返回
[6,8,9,11] <= 3库返回
步骤二、找到步骤一返回的min和max,即3和11
步骤三、通过min和max二次查询:ORDER BY x WHERE xBETWEEN 3 AND 11
[3,4,7,9,10] <= 1库返回,4在1库offset是3333,于是3在1库的offset是3332
[3,5,6,7,11] <= 2库返回,3在2库offset是3333
[3,5,6,8,9,11] <= 3库返回,6在3库offset是3333,于是3在3库的offset是3331
步骤四、找出全局OFFSET
3是全局offset3332+3333+3331=9996
当当当当,跳过3,3,3,4,于是全局OFFSET 10000 LIMIT 4是[5,5,6,6]
本文介绍了一种在分库环境下实现OFFSET LIMIT查询的方法。通过对原始查询进行改写,利用多次查询与数据整合来达到目的。首先,将原始查询拆分为针对每个分库的查询;其次,通过获取最小和最大值范围进行二次查询;最后,计算全局OFFSET并返回最终结果。
225

被折叠的 条评论
为什么被折叠?



