【MySQL】拓展:为什么不要超过三表关联查询?

news2024/9/9 5:25:50

其实阿里有一个数据库的规范,那就是禁止三表以上的关联查询。那么目前为止我所接触过的一些项目,也的确是差不多的,有部分可以放宽到四表查询,但是超过四张表就不允许了,因为的确是会有性能影响的。除非是传统行业,对性能要求不是特别大,那么这个规约可以无所谓。那么绝大多数互联网公司也的确这么做,少数公司不按照这个规范呢也问题不大的。

为什么?

产品不允许:

  • 阿里的OceanBase是只能两表查询,因为设计初衷就是如此,所以你不能违背。
  • MyCat也只能支持跨库的两张表关联查询。
    所以产品本身不支持,你也不能强制做多表关联

MySql自身问题:

  • 超过3表,那么如果优化力度做的不够,那么由于多表的嵌套查询,性能会极差(后面我们会有一个7-8表的关联查询,这个会做出来给大家看,性能也是绝对不好的)

(前瞻性)方便系统拆分:

  • 比如用户和企业一开始在同一个业务中,那么可以做多表关联的查询,比如通过企业id获得所有的HR类别。但是如果在未来企业数据剧增,用户数据剧增,那么我们必定会进行服务系统的拆分,也就是我们目前的微服务,企业服务和用户服务,那么两个服务会由两个不同的项目组或者项目团队进行维护的,那么别的团队不会让你做直接sql的表关联脚本查询,肯定禁止,所以这个时候,我们都是通过业务层的代码来进行查询并且组装的。所以前期的表关联查询越少,那么后期的改造成本也就越低了,否则后期的数据迁移和改造会相当让人头疼。
  • 甚至说,哪怕没有做服务的拆分,企业表达到几百万了,那么我们可能会根据地区进行水平拆表,这个时候原有的两表关联查询可能也会失效了,所以,不相关的业务表尽量不要做关联的查询。
  • 数据库与其他存储介质的结合,很多时候有些业务的查询,是会结合redis+mongodb+elasticsearch+mysql这样多个存储介质共同查询后的包装结果,所以单单查数据库是满足不了业务的,数据库和业务之间往往都会有中间件,所以为了降低数据库的耦合,也是需要避免多表关联的。

所以禁止多表关联查询,说这其实也是为做分布式拆分做好基础准备。

公共表怎么查?

类似:省市区、系统参数、数据字典等都是属于公共数据,如果在平日里实现,那么都是在单系统里做查询,在分布式微服务中,往往把这些公共数据作为放入到资源服务中来实现,而我们现在就是这么做的,比如数据字典、行业树形结构,都是放在一个独立的微服务中使用。

假设用户数据会被企业服务、订单服务等调用,这个时候,其实用户数据会作为基础数据提供给其他服务使用,如此,其实也可以把用户看做是一个公共的数据,那么用户数据在被其他服务调用使用的时候就会通过rest接口来提供服务。其实在微服务之前,我们在早期涉及到类似场景的时候,就是通过httpclient来调用的,或者通过自研注册中心,把服务都注册进去,再调用用户服务的接口即可。

所以,其实涉及到公共资源的数据,哪怕前期是单系统同库,那么也是尽量降低耦合,尽量不要做多表关联的查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1961660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt】QLCDNumberQProgressBarQCalendarWidget

目录 QLCDNumber 倒计时小程序 相关属性 QProgressBar 进度条小程序 相关设置 QLCDNumber QLCDNumber是Qt框架中用于显示数字或计数值的小部件。通常用于显示整数值,例如时钟、计时器、计数器等 常用属性 属性说明intValueQLCDNumber显示的初始值(int类型)va…

【全面介绍下Gitea,什么是Gitea?】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

这几个高级爬虫软件和插件真的强!

亮数据(Bright Data) 亮数据是一款强大的数据采集工具,以其全球代理IP网络和强大数据采集技术而闻名。它能够轻松采集各种网页数据,包括产品信息、价格、评论和社交媒体数据等。 网站:https://get.brightdata.com/we…

ubuntu安装并配置flameshot截图软件

参考:flameshot key-bindins 安装 sudo apt install flameshot自定义快捷键 Settings->Keyboard->View and Customize Shortcuts->Custom Shortcuts,输入该快捷键名称(自定义),然后输入command(…

RFID物流智能锁在物流锁控领域的意义与应用

在当今全球化和电子商务迅速发展的时代,物流行业作为经济的重要支撑,面临着日益增长的安全、效率和管理需求。物流锁控作为保障货物在运输过程中安全与完整的关键环节,传统的机械锁和简单电子锁已经难以满足现代物流复杂多变的业务场景。 一、…

前缀表达式(波兰式)和后缀表达式(逆波兰式)的计算方式

缀是指操作符。 1. 前缀表达式(波兰式) (1)不需用括号; (2)不用考虑运算符的优先级; (3)操作符置于操作数的前面。(如 3 2 ) 1.1 中…

3.5.3、查找和排序算法-插入类排序和选择类排序

术语说明 稳定:如果a原本在b前面,而ab,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而ab,排序之后a可能会出现在b的后面; 例如:数组{1,2,3,3,4,7,6}。如果排序后,两个3的位…

【嵌入式之RTOS】死锁问题详解

目录 一、什么是死锁 二、产生死锁的四个必要条件 三、避免死锁的方法 四、实际应用中的考虑 一、什么是死锁 死锁(Deadlock)是多任务或多线程环境中一个常见的问题,尤其是在实时操作系统(RTOS)中,如果…

kvm虚拟化平台部署

kvm虚拟化平台部署 kvm概念简介 kvm自linux2.6版本以后就整合到内核中,因此可以看做是一个原生架构. kvm虚拟化架构 硬件底层提供物理层面的硬件支持 linux(host),就相当于这个架构中的宿主机,上面运行了多个虚拟机。…

替换后端国外身份目录服务,宁盾身份域管接管FileNet助力国产化升级

IBM FileNet 是一款优秀的企业内容管理解决方案,为客户提供了领先的文档管理和流程管理集成环境,被大量企业所采用。FileNet 需要使用企业级的目录服务器(LDAP)作为其用户管理系统,满足其认证和授权的需求。对于 LDAP …

最高200万!苏州成都杭州的这些AI政策补贴,你拿到了吗?

随着全球人工智能技术的迅猛发展,地方政府纷纷出台相关政策以抢占未来科技的制高点。苏州 成都 杭州这三个城市更是推出了一系列AI政策补贴,旨在通过多方面支持,推动本地AI产业的发展。本文将带你了解目前不完全统计到的苏州 成都 杭州三地AI…

【Vulnhub系列】Vulnhub_pipe 靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub-pipe 靶场渗透 原文转载已经过授权 原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io) 一、环境配置 1、解决IP扫描不到问题 2、打开虚拟机,并修改网络连接模式为【NAT】即可 二、信息收集 1…

Python实战——轻松实现动态网页爬虫(附详细源码)

大家好&#xff0c;我是东眠的鱼&#xff0c;专注原创&#xff0c;致力于用浅显易懂的语言分享爬虫、数据分析及可视化等干货&#xff0c;希望人人都能学到新知识。<文末附带精品籽料哦&#xff0c;也可以和博主一起学Python呀&#xff01;> 项目背景 有同学自学爬虫时…

前端vue3 巧妙的checkbox 选中框样式

我们 做前端页面交互效果的时候 我们会使用到 checkbox 复选框 做一些交互的效果 我是用的是 nut-ui 组件库中的 checkbox 组件 类似于这样的选中效果 假如 二选一的那种 可以 这样写 交互好看 而不是单纯的 checkbox 框 这里我就不使用 gif 图片了 大家应该都可以看懂的 …

A股继续震荡下行,成交量继续一蹶不振。

A股继续震荡下行&#xff0c;成交量继续一蹶不振。今天的A股&#xff0c;让人揪心不已&#xff0c;你们知道是为什么吗&#xff1f;盘面上出现1个重要信号&#xff0c;一起来看看&#xff1a; 1、今天两市低开低走&#xff0c;向下回补了2867点的缺口&#xff0c;让人揪心不已。…

计算机毕业设计选题推荐-基于司机信用评价的货运管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

CUDA_Occupancy_Calculator计算公式

CUDA_Occupancy_Calculator计算公式

6 Java的基本程序设计结构(基本语法5)- 面向对象进阶

文章目录 面向对象进阶一、 static 静态1 静态变量(1)基本定义和用法(2)静态变量内存图2 静态方法(1)基本定义和用法(2)工具类练习:按下面需求写一个工具类3 static注意事项4 重新认识main方法二、继承1 继承的概念2 继承的特点3 继承到底能继承父类中的哪些内容?4 继…

leetcode日记(63)颜色分类

感觉就是排序问题&#xff1f;我使用的是时间复杂度比较高的简单粗暴排序法&#xff0c;时间复杂度O&#xff08;n^2&#xff09;。 class Solution { public:void sortColors(vector<int>& nums) {int nnums.size();for(int i0;i<n;i){for(int ji1;j<n;j){if…

泛微OA BPM 全程数字化业务介绍、管理、财务一体化 数据业务架构图 上帝视角 02

III.泛微业务、管理、财务一体化过程介绍 IV.低代码平台及典型场景搭建过程 V.全程数字化运营平台价值总结 档案管理 档案接收,四性检测,快速可查找 重要:档案管理:架构总图 业务应用都在一个平台,确保档案实现100%归档 自动化档案采集:自动接收各类档案,如文书档案、合…