关于MySQL的一些相关规定

1.为什么阿里巴巴规定不能超过三张表join

之所以不建议使用join查询,最主要的原因就是join的效率比较低。

MySQL是使用了嵌套循环(Nested-Loop Join)的方式来实现关联查询的,简单点说就是要通过两层循环,用第一张表做外循环,第二张表做内循环,外循环的每一条记录跟内循环中的记录作比较,符合条件的就输出。

而具体到算法实现上主要有simple nested loop,block nested loop和index nested loop这三种。而且这三种的效率都没有特别高。

MySQL是使用了嵌套循环(Nested-Loop Join)的方式来实现关联查询的,如果有2张表join的话,复杂度最高是O(n2),3张表则是O(n3)...随着表越多,表中的数据量越多,JOIN的效率会呈指数级下降。

2.为什么不推荐使用外键

MySQL外键用于建立表之间的关系,它定义了一个表中的一列或一组列,这些列的值必须在另一个表的主键列中存在。

MySQL外键最大的作用是有助于维护数据的一致性和完整性

  • 一致性:如果一个订单表引用了一个客户表的外键,外键可以确保订单的客户 ID 存在于客户表中,从而保持数据的一致性。
  • 完整性:外键可以防止在引用表中删除正在被其他表引用的记录,从而维护数据的完整性。

但是,在很多互联网大厂中很少使用外键

外键存在的问题

  • 1.性能问题:外键会增加数据哭的负担,每次插入、更新或者删除的时候,数据库都需要检查外键约束的完整性。首先,在数据库中可能会多个外键约束,这使得在每次插入、更新、删除的时候,数据库都需要维护这些外键,这使得会导致性能开销。其次,在插入新数据时,数据库都需要一致性的检查确保引用的数据编号在表中存在,这额外的增加了数据插入的执行时间

  • 2.锁竞争问题

    当多个事务同时尝试插入数据时,它们需要检查表,就需要获得额外的锁,以确保一致性,这可能导致事务之间的锁竞争,降低并发性能。

    一旦发起锁竞争可能会带来更加严重的死锁问题

  • 3.无法适应分库分表

    当数据量大时,这时就需要考虑分库分表了,但在分库分表环境中,相关数据可能分布在不同的数据库中,外键通常难以跨越不同的数据库建立连接,分库分表环境中,数据的一致性可能更难维护。跨库事务搞不定。

  • 4.逻辑删除

    我们在很多时候,都不会直接删除数据,而是通过逻辑删除进行,而外键在逻辑删除中会有一些约束。如:

1、外键是一种物理约束,而我们业务当中更多用的是逻辑删除。

2、加了外键之后必须先删子表,再删主表,而更多情况下都是先对主表做逻辑删除,再对子表做统一处理。

相关推荐
小爬虫程序猿5 分钟前
淘宝商品信息如何存储到数据库?
数据库·爬虫·php
麻芝汤圆6 分钟前
使用 MapReduce 进行高效数据清洗:从理论到实践
大数据·linux·服务器·网络·数据库·windows·mapreduce
天狼122219 分钟前
第1章-3 MySQL的逻辑架构
mysql·逻辑架构
靠近彗星43 分钟前
如何检查 HBase Master 是否已完成初始化?| 详细排查指南
大数据·数据库·分布式·hbase
郑梓妍1 小时前
ubuntu改用户权限
服务器·网络·数据库
w23617346011 小时前
存储型XSS漏洞解析
数据库·oracle·xss·存储型xss
SelectDB2 小时前
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
大数据·数据库·aigc
码觉客2 小时前
MySQL 5.7+ for Windows 解压缩版配置安装说明
mysql
用户6279947182622 小时前
GBase 8a南大通用数据库节点替换
数据库
Мартин.2 小时前
[CISSP] [5] 保护资产安全
数据库·安全·oracle