说到mysql,很多面试官会问mysql的底层存储结构,mysql的存储引擎,什么是聚簇索引之类的问题
,我这边就好好写写这些是什么。

首先mysql底层结构是啥,b+tree。很多人都会说这个,然后呢这个是怎么实现的,开始懵逼的,只能记得一些模棱两可的答案,我这边其实也差不多,基本属于模模糊糊,看一遍忘一遍。

我们先来张数据库表吧,假设表名为T

col1 col2 col3
1 一帆风顺 2020-02-02
2 双龙戏珠 2020-02-03
3 三阳开泰 2020-02-04
4 四海升平 2020-02-05
5 五子登科 2020-02-06
6 六六大顺 2020-02-07
7 七步之才 2020-02-08

mysql的底层存储结构

我们如果要查询某个数据,比如知道了col1的值,例如6,select* from col1=6,这样的查询语句,如果使用的是使用的二叉树的存储结构,就会发现如果要去查询col1为6的数据要走6次才能拿到mysql索引理解
这样是非常浪费时间的,如果是100,1000呢,那查询的时间会更长

接下来我们可以看btree,相对于普通的二叉树,b树真的进化了很多很多,看到这个正宗的b树了么,如果现在我们去查询col1=6的值,我们会发现,我们只要查2次就够了,先查4,再查6就到了,但是b树有几个问题,每个节点都会带有数据,包含整行数据的值,这就代表每个节点存储的数据条数不会太多,然后在查询col1>6的条件的时候就会很蛋疼,他会先查询到6,然后在从头开始查询一遍查询到7,如果还有更多的话,他还要重头开始查
mysql索引理解
他每个节点的结构都是如下类似
mysql索引理解
接下来我们看b+tree,在讲之前我们先要讲一下树形结构的叶子和非叶子节点,叶子节点意思是包含这条数据值的节点,非叶子节点则不包含,接下来我们看图,我们反着看,先看最底下一行,我们发现他1-7的值都包含了,这行就是叶子节点,它里面包含了所有值,而上面的则没有值,只是单纯的存储了一个col1的值,当然我们的col1是主键索引,这种b+树的结构在查询的效率上是更加快的
mysql索引理解
在这里要说一点,如果是查询3这个值,我们的第一个查询应该是,发现要查询的3,则应该是查3-5这个值,发现3>=3并且小于5,继续走下一步查询4这个位置,发现3<4则走4的左边链路,查询到了3,这个3就包含了这条数据的值,b+tree还有一个优点就是在查询非等关系的时候,比如大于,他就可以通过左右链路的关系去查,比如>=3,我们就可以先查询到3的位置,然后通过链表关系往后排查,不用再次从头开始查询,这个东西b树就不会有
mysql索引理解
接下来还有个组合索引的说法,比如我们的组合索引是(col1,col2,col3)这个顺序的索引,则树的结构则会先按照col1的结构来排序,如果相等,则继续按照col2的顺序来排,接着是col3。

mysql的存储引擎

在创建mysql数据库的时候,我们会选择一个存储引擎,很多人认为这个就是所有表的存储引擎,这个想法是错误的,这只是一个默认的,我们可以单独为每个表进行存储引擎的设置,一般我们常用2种

InnoDB

我们可以看到这个存储的地方只有2个文件,他的索引和数据值都是存储在一起,都在ibd文件中,可以叫聚簇索引或者聚集索引
mysql索引理解

MyISAM

我们看数据库的存储,myisam存储会出现三个文件,索引和值是分别存在MYI和frm两个表中的,这可以说是非聚簇索引或者非聚集索引
mysql索引理解

没了。。。。。,有什么不明白的可以留言,我写的是不全的!!!!!

相关文章:

  • 2022-01-07
  • 2021-07-16
  • 2021-10-08
  • 2021-07-22
  • 2021-11-17
  • 2022-01-03
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-10
相关资源
相似解决方案