mysql分库后怎么查询


当前第2页 返回上一页

前提条件假设:查询第1001页的数据,每页显示10条记录

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

1):我们先记录下要查询的记录数的范围:(1001-1)*10=10000 开始,10010结束->10000-10010

单体的sql为:select * from db limit 10000,10;

我们总共有4个表,意味着:每个表的start应该为10000/4=2500,从而sql变成了:

select * from db_x limit 2500,10;   //假设是平均分配的,因而我们可以均分,不均分也没关系,后续操作会补齐

我们会得到4个表中的记录:(因为我demo还没写,所以先手写了)

T1:(1,"a"),.......

T2:(2,"b"),.......

T3:(3,"c"),.......

T4:(4,"d"),.......

真实数据第1001页不可能是1开头的,将就着看吧,过几天会一起讲rabbitMQ分布式一致性和这个demo一起发布的

ok,第一阶段的sql查询结束

 

2):对4个表中返回的记录进行id匹配(id如果非整型,自行用hashCode匹配),因为是升序查询,所以我们只需要比较下每个表的首条记录

的id值即可,获得了最小的minId=1,和各个表最大的那个值maxId;ok,转换sql思路,这里我们采用条件查询了(弥补操作第一步):

select * from db_x where id between minId and maxId 这样我们就获取到了遗漏的数据(当然有多余的数据)

这样我们4个表中就返回了可能记录数各不相同的记录,第二步结束

 

3):

之后记录minId出现的位置,如T1出现的位置为2500,T2出现的位置为2500-2=2048 ,T3出现的位置为2500-3=2047 ,T4出现的位置

为2500-3=2047 则最终出现的记录数为:2500+2048+2047+2047=10000-2-3-3=9992,因此我们需要的查询的记录数需要从9992 依次往后取

8个开始,然后再取10个就是所求的数据,这种方式能做到数据精确查询,但是唯一的缺点就是每次查询都需要进行二次sql查询

以上就是mysql分库后怎么查询的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

mysql视图怎么修改表中信息

mysql 数据库函数库

mysql怎么在当前时间增加一小时

mysql安装配置jdbc和基础学习

mac如何开启mysql bin-log

mysql慢查询是什么

mysql外键约束怎么写

《阿里巴巴java开发手册》里面写超过三张表禁止join,这是为什么?

如何删除mysql中的自增主键

mysql怎么查看有没有索引?

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...