MySQL的存储引擎(非聚集索引也叫稀疏索引)
image.png
一般常用的就是Innodb,mylsam和memory,下面对比这三种进行对比介绍:
存储引擎形容的数数据库的表级别的
在使用Navicat创建表格时候,就可以选择这个表格的存储引擎,记住,是表级别的
image.png
mylsam存储引擎
image.png
普及一下MySQL的基础知识:
在MySQL数据库创建的数据库,以及对应的表,在MySQL安装目录下的data目录下都能看到
比如MySQL数据库里面创建了lala,mya-mye这几个库
MySQL库状态
对应磁盘上面的存储位置
上图是不是就能够看出来这个存储的方式,然后点击进去就能够看到里面的对应的表
以点击进入lala数据库为例
image.png
其中db.opt里面存储的内容如下,主要是存储的是数据库的字符集
image.png
在lala数据库里面存储了三张表(lala(mylsam),test1(innodb),test2(innodb))
粉色代表的是mylsam存储引擎下表的磁盘存储方式(frm和MYD,MYI结尾三个文件)
绿色代表innodb存储引擎下表的磁盘存储方式(frm和ibd结尾两个文件)
- frm存储的是这个表的结构,是framework框架的缩写
- D结尾是data的意思,就是存储的是数据,大小为0表示这个表没数据
- I就是index索引的简写
-
d结尾是即存储了数据也存储了索引
image.png
mylsam存储引擎的MYI文件索引的存储的数据结构就如下图的B+树存储结构
image.png
MYD存储的就是下面的这个数据,他是随机存储的,打散了的
image.png
比如我们查找select * from table where Col=30这个数据,底层的数据走向是
先去MYI里面查找,因为里面存的是b+树,在内存中查得30,每一个节点设置的是16K,找到,然后找到这个数据在磁盘上面的位置,根据这个位置,就能够在磁盘上面快速定位到这个元素
innodb存储引擎(使用最多,聚集索引,也叫聚簇索引)
image.png
上图为Innodb的存储引擎的存出结果,他的叶子结点和mylsam存储引擎是不一样的,他的叶子结点放的是索引所在行的完整的数据结构,定位到索引元素,可以直接拿到这个文件就行,这个也就是innodb他的文件存储的是.fra和.ibd两个文件,因为他的索引和数据在ibd这两个文件.
聚集索引就是这个叶子结点包含了这一行的所有数据
非聚集索引就是mylsam的叶子结点那样,索引和数据分开存放,