Mysql索引结构

一、索引结构

mysql索引数据结构有hash和b+tree,hash由数组和链表组成。hash不支持范围查找。

B-Tree由红黑树(从左到右为小中大)变化而来,不同的是btree一个节点里面有多个节点,并且节点含有数据。B+tree(有冗余节点)是B-tree的变种,详细区别看图。

Mysql索引结构_第1张图片

Mysql索引结构_第2张图片

二、索引

在mysql启动时会把数据库索引加载到内存中,后续索引到的数据也会缓存到内存中

1、MyISAM存储引擎

节点存的不是表数据,而是表数据文件中对应的地址。这就是回表操作和innodb中的二级索引类似。

Mysql索引结构_第3张图片

2、Innodb存储引擎

Mysql索引结构_第4张图片

除主键索引外,其他索引都是二级索引(辅助索引)。二级索引查找的过程为先在二级索引找到主键索引的key,再在主键索引中查找(回表操作)。如果表没有建主键,mysql会自己维护一列看不到的数据,保证有一列数据是唯一的。

Q:为什么innodb表一定要建主键,并且最好使用int自增作为主键

A:为了不用mysql维护唯一列数据,节省资源。建立和维护索引过程中需要进行key的比较,int类型更好比较。自增使得树结构不容易产生树结构分裂,更节省算力。

3、复合索引

复合索引排序原则是从左到右按照hash值(mysql内部算法)升序排序。

Mysql索引结构_第5张图片

你可能感兴趣的:(MYSQL)