炸!业界难题,跨库分页的几种常见方案
步骤五:既然得到了time_min在全局的offset,就相当于有了全局视野,根据第二次的结果集,就能够得到全局offset 1000 limit 5的记录 第二次查询在各个分库返回的结果集是有序的,又知道了time_min在全局的offset是994,一路排下来,容易知道全局offset 1000 limit 5的一页记录(上图中黄色记录)。 这种方法的优点是:可以精确的返回业务所需数据,每次返回的数据量都非常小,不会随着翻页增加数据的返回量。 帅气不帅气!!! 总结 今天介绍了解决“跨N库分页”这一难题的四种方法: 方法一:全局视野法 (1)SQL改写,将
改写成
(2)服务层对得到的N*(X+Y)条数据进行内存排序,内存排序后再取偏移量X后的Y条记录; 这种方法随着翻页的进行,性能越来越低。 方法二:禁止跳页查询法 (1)用正常的方法取得第一页数据,并得到第一页记录的time_max; (2)每次翻页,将
改写成
以保证每次只返回一页数据,性能为常量。 方法三:允许模糊数据法 (1)SQL查询改写,将
改写成
性能很高,但拼接的结果集不精准。 方法四:二次查询法 (1)SQL改写,将
改写成
(2)多页返回,找到最小值time_min; (3)between二次查询
(4)设置虚拟time_min,找到time_min在各个分库的offset,从而得到time_min在全局的offset; (5)得到了time_min在全局的offset,自然得到了全局的offset X limit Y; 文章比较长,希望大家有收获。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |