mysql分库后怎样查询
发布时间:2022-03-07 13:45:20 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下mysql分库后如何查询,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧! 分库分表的策略,依项目需求而定,这里采用的是常规的做法:根据取模的方式,假设我们水平分库2个,每个库又水平拆表2个 既总共有4个表,查询的时候默认没
小编给大家分享一下mysql分库后如何查询,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧! 分库分表的策略,依项目需求而定,这里采用的是常规的做法:根据取模的方式,假设我们水平分库2个,每个库又水平拆表2个 既总共有4个表,查询的时候默认没有按照其他的条件进行排序,假设我们要查询第41页的数据,每页显示10条数据 第一种: 也是最简单的一种:通过额外的添加一张关联表,属性中必有id属性,至于是否有库id属性和表id属性(既第几个库和第几个表)可有可无,因为这个可以根据id自行取模获取,注意这张表存放的数据是所有数据,但是胜在属性列少,只有提供索引的几个属性列,这样的话我们只需要select * from brand_temp where … limit 400,10(插叙第41页的数据,每页显示5条数据),然后我们获取了id之后就可以去对应的表中查询了 第二种: 传说中的最好的方式,支持跳页查询,这个方式核心在于2次sql查询,具体怎么做呢: 前提条件假设:查询第1001页的数据,每页显示10条记录 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): 之后记录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分库后如何查询有了一定的了解。 (编辑:临夏站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐