当分库分表后,你如何进行联表查询?

【特别说明】此问题属于「Boss 有请·电商专场」,提问者正在招聘高薪岗位,如果你使用真实身份发布回答,BOSS 将可直接查看你的在线简历,并选择是否与你主动开聊。

回答·110
最热
最新
  • 如果是单纯的数据库方面,有两种情况,第一种,每个库的表中有不同的数据(如,一个存放事实,一个存放维度),可以通过两个表的字段去做关联(看情况选择一对多还是多对多),第二种,每个库的表存放的数据相同(如都是事实数据,只是年月不同),可以使用 union all。当然这些情况得看数据库,swl server 同一台服务器,可以直接数据库名.scheme 名.表名,不同服务器可以使用 dblink,当然如果还是不行,就得想一想通过抽数工具抽到同一台数据库上才能进行连表查询。
  • 1)分库时把需要关联的数据放到同一个库,尽量避免了夸库查询; 2)实在需要关联查询的,在一个库查出一部分数据,然后再查另一部分,自己在代码中组合; 3)用服务组合需要关联的数据,监视数据变化,将数据拿到进行组合放入 nosql 内存数据库,查询时直接从 nosql 内存数据库查询; 4)使用冗余字段,部分字段两个表都存,直接查询; 5)修改业务,不允许业务展示时关联不必要的数据,或者企图展示过多数据;
  • 数据量太大才会分库分表,之后还要跨库查询?那分库分表的作用是什么啊,单纯给自己找麻烦?
  • 分库分表后,做联表查询。 1. 分库。把 sql 在每个库执行一下,然后对结果做合并。 2.分表。把 sql 中的表名称改下,执行后做合并。
  • 虽然是针对 JAVA 的面试题,还是简单的回答下吧 首先要知道为什么选择分库分表,这种机制无非是为了解决行业大数据交互所带来的瓶颈和压力,分库分表一般都是有拆分逻辑的,根据不同的业务场景,拆分逻辑也略有不同,拆分后还是能根据自己的拆分逻辑定位到数据,但正常公司是不会选择在分库分表的基础上进行数据查询,ETL 应运而生,在通过库唯一 ts 进行抽数,清洗,在进入只读库,后期的数据查询工作都在这里。 对于面试企业提出的这个问题,感觉面试官不是在于想了解当前问题的答案,而是在关注面试者最终给出的解决方案,从而筛选出合适的应聘者和企业想要找到岗位人才
  • 数据量大不建议联表,尤其是交易流水这种。每个库分别查询,然后再进行综合处理。 遇到过的坑就是查询结果进行分页,由于流水不断更新,翻页要存储之前的查询到的条目当做记录节点。个人感觉浪费了很多空间。由于该场景调用并不频繁,将结果存在 redis 里,最终效果还是可以接受的。
  • 我们这边的方案 1. 用冗余字段来代替 或者冗余表 2. update 的向 mq 发送一条消息,进行冗余字段的更新 3. 每天晚上任务调度中心会进行数据的补偿
  • 1.基因法:让关联表拥有相同基因,比如我们要用户表和部门表联合查询,我们在生成主键的时候可以让用户表和部门表拥有相同的取模尾数,这样就可以保证用户表和部门表关联的字段在同一张表内,比如部门表有八张表,部门 id 为 1100100,我们在存储部门信息时,对部门 id 进行取模后该条数据会存储到部们分表中的第 1 张表中,这个时候我们存储该部门下的用户信息时,在生成用户唯一 id 后拼接上部门的有效基因,因为要对 8 取模,也就是最后两位数字可以决定取模结果,这是就认为最后两位数是部门 id 的有效基因,比如我们生成的用户 id 为 11188(要保证唯一),此时我们把部门的有效基因加上去后,该用户 id 即为 1118800,这样对用户 id 用 8 取模,用户信息会被分配到用户表的第一张表,这个时候连表只需要连同下标的表,比如我要连表查用户 id 为 1119900 的部门信息,那就通过取模算法算出用户表和部门表的下标,这样就可以只关联一组表。 2.用了分库分表尽量还是要避免关联查询,宁愿将字段冗余一下,比如在用户表里面冗余部门 id 和部门名称等常用字段 另外:在下才疏学浅,只是分享下自己的见解,大家轻喷
  • 分库分表不能做连表查询,只能去单一查询最后合并结果
  • 简单一点回答不行吗,整那么难干嘛,谁愿意看。主表连接从表,从表字段连接主表字段。