MySQL不用外键的话,如何让表起来关联

互联网- 2023-08-20 21:34:57

mysql怎么让2个表关联起来

大家好,今天来为大家分享MySQL不用外键的话,如何让表起来关联的一些知识点,和为什么不建议使用物理外键的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

本文目录

  1. 数据库中的索引,原理是什么为什么查询使用索引就会快
  2. 碳60的物理性质和化学性质有哪些
  3. MySQL不用外键的话,如何让表起来关联

数据库中的索引,原理是什么为什么查询使用索引就会快

相信很多程序员朋友对数据的索引并不陌生,最常见的索引是B+Tree索引,索引可以加快数据库的检索速度,但是会降低新增、修改、删除操作的速度,一些错误的写法会导致索引失效等等。

但是如果被问到,为什么用了索引之后,查询就会变快?B+Tree索引的原理是什么?这时候很多人可能就不知道了,今天我就以MySQL的InnoDB引擎为例,讲一讲B+Tree索引的原理。

索引的基础知识

MySQL的基本存储结构是页,大概就是这个样子的:

在这里,我们需要了解以下几点(非常重要):

当我们用MySQL的InnoDB引擎创建表,有且只能有一个主键;如果我们没有显示地指定之间,那么MySQL会自动生成一个隐含字段作为主键;

聚集索引:以主键创建的索引;聚集索引的叶子节点存储的是表中的数据;

非聚集索引:非主键创建的索引;非聚集索引在叶子节点存储的是主键和索引列;使用非聚集索引查询数据,会查询到叶子上的主键,再根据主键查到数据(这个过程叫做回表)。

页和页之间、页和数据之间的关系

我们以聚集索引做讲解,页和页之间、以及页和数据之间的关系是这样的:

数据页和数据页之间,组成一个双向链表;

每个数据页中的记录,是一个单向链表;

每个数据页都根据内部的记录生成一个页目录(Pagedirectory),如果是主键的话,可以在页目录中使用二分法快速定位;

如果我们根据一个非主键、非索引列进行查询,那么需要遍历双向链表,找到所在的页;再遍历页内的单向链表;如果表内数据很大的话,这样的查询就会很慢。

B+Tree索引的原理

先让我们看看B+Tree索引大概是什么样子(以聚集/主键索引为例):

假如这时候我们要查询id=16的数据:

查询页-1,找到页-2存储的是小于30的数据;

查询页-2,找到页-5存储的是10~20的数据;

查询页-5,找到id=16的数据。

很显然,没有用索引的时候,需要遍历双向链表来定位对应的页,而有了索引,则可以通过一层层“目录”定位到对应的页上。

为什么B+Tree索引会降低新增、修改、删除的速度

B+Tree是一颗平衡树,如果对这颗树新增、修改、删除的话,会破坏它的原有结构;

我们在做数据新增、修改、删除的时候,需要花额外的时间去维护索引;

正因为这些额外的开销,导致索引会降低新增、修改、删除的速度。

思考题,欢迎留言讨论

现在你是否理解了B+Tree索引的原理?

最后再留一个思考题:为什么官方建议使用自增长主键作为索引?大家可以在留言中写下你的答案。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注;关注我后,可私信发送数字【1】,获取海量学习资料。

碳60的物理性质和化学性质有哪些

物理性质:

C60在室温下为紫红色固态分子晶体,有微弱荧光。密度为1.68g/cm^3。不溶于水等强极性溶剂,在正己烷、苯、二硫化碳、四氯化碳等非极性溶剂中有一定的溶解性。常态下不导电。

化学性质:

周环反应:富勒烯的[6,6]键可以与双烯体或双烯亲和体反应,如D-A反应。[2+2]环加成可以形成四元环,如苯炔。1,3偶极环加成反应可以生成五元环,被称作Prato反应。富勒烯与卡宾反应形成亚甲基富勒烯。

加氢还原:氢化富勒烯如C60H18,C60H36。然而,完全氢化的C60H60仅仅是假设存在因为分子张力过大。高度氢化富勒烯不稳定,富勒烯与氢气直接反应在高温条件下的直接反应会导致笼结构崩溃,而形成的多环芳烃。

羟基化反应:富勒烯可以通过羟基化反应得到富勒多醇(fullerenols)和富勒醇。

氧化还原反应:在光照的条件下将C60与O2反应生成环氧化物C60O2,但这种环氧化物不稳定,用矾土分离时能还原成C60。

加成反应:在光照的条件下将C60与O2反应生成环氧化物C60O2,但这种环氧化物不稳定,用矾土分离时能还原成C60。

MySQL不用外键的话,如何让表起来关联

表的关联,只是一种逻辑概念,本并不需要进行物理上的“硬绑定”,而且你所期望的关联,只是其数据上存在一定的联系而已,这种联系实际上是设计之初就定义好的固有逻辑。

所以在业务代码中实现的时候,只要按照设计之初的这种固有关联逻辑来“存/取”数据即可,并不需要在数据库层面进行“硬绑定”

因为在数据库层面通过使用外键的方式进行“硬绑定”,会带来很多额外的资源消耗来进行一致性和完整性校验,即使很多时候我们并不需要这个校验。

所以一般不建议在数据库中使用外键约束来保证数据的一致性和完整性。

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

MySQL运算符,外键
  • 声明:本文内容来自互联网不代表本站观点,转载请注明出处:bk.66688897.com/12/108047.html
上一篇:不建议穿隔离衣的原因分析
下一篇:loft自住适合买吗都是小产权啊,怎么样
相关文章
返回顶部小火箭