Mysql的索引结构有哪些?
- B+Tree 和 Hash结构
- 平时所说的索引都包含: 聚簇索引,组合索引,覆盖索引,前缀索引,唯一索引,这些默认都是【B+Tree】。
- 主流的InnoDB和Myisam引擎都是用的是B+Tree。
B+Tree的特点
- B+Tree是在B-Tree上的一个变种,将B-Tree的每个节点都存储key-data变成了只有叶子结点才会存储data
- Mysql的B+Tree的叶子结点是一个【双向链表】,注意:传统的B+Tree叶子结点是单向链表,Mysql做了变种,所以Mysql的叶子结点是双向链表。
- B+Tree的非叶子节点是不存储数据的,只会存储key,因此他比B-Tree能存储更多的key,并且层数要比B-Tree更加稳定,一般来说3层就够用了。
聚簇索引 与 非聚簇索引
- 聚簇索引就是key和data都在一个节点上,而非聚簇索引是key和data是分开的,即key = 【索引内容】,而data=【主键id】,想查具体数据,要带着主键值去主键索引里面查。
- 我们所说的主键索引就是聚簇索引。而我们设置的联合索引,就是非聚簇索引,需要通过回表查询来完成数据查找,回表的意思就是带着主键值去主键索引查找。
- 索引聚簇索引的性能更高,非聚簇索引由于多了个回表查询,因此通常性能不如聚簇索引。
- innodb是聚簇索引,而myisam是非聚簇索引,但都是B+Tree结构。