mysql索引结构

nber1994

All
Posts
Categories
Tags
About

mysql索引结构

    ❐mysql


mysql-索引结构

索引的结构是B+Tree,这个众所周知,但是具体的结构以及原因我们来探究下

聚簇索引和非聚簇索引

首先要知道

聚簇索引

聚簇索引的特点

顺序写入与读取的性能要大于随机写入读取,所以你会发现很多地方的设计其实都是将随机写入转变为顺序写入的, 例如mysql的doublewirte,先将需要落磁盘的数据写入内存缓冲区之后,在顺序写入到磁盘的共享表空间中,再写入实际的页面中,来解决写磁盘时崩溃导致的数据丢失问题

非聚簇索引

两种索引的数据存储

MyIsam

例如按照下述代码建表,col1为主键

create table layout_test(
    col1 int not null,
    col2 int not null,
    primary key(col1),
    key(col2)
);

主键索引的结构是按照行号来组织的,其结构如下 如下图,索引文件按照行号来进行组织,叶子节点存储的是数据行的地址指针

而对于col2对应的索引结构,与主键上的一致

InnoDB

对于聚簇索引,其主键索引是按照主键索引组织的,其结构大致:

而辅助索引,和主键索引有一定区别,叶子节点存放的不是数据而是主键的id

两种结构的查找过程

由此可见,聚簇索引的搜索过程,首先通过辅助索引拿到主键id的值,再走一遍主键索引拿到数据
而非聚簇索引则是通过辅助索引可以直接拿到数据,似乎聚簇索引会比较慢啊,那为何还会采用这种设计?