mysql索引数据结构

Posted good good study

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql索引数据结构相关的知识,希望对你有一定的参考价值。

mysql索引数据结构选择的是B+树。以下列出可选用的数据结构,和他们所存在的一些缺点。

二叉树(如果是线性增长的数据,则二叉树会一直增加深度)
红黑树 (虽然红黑树解决了线性增长的数据问题,但是对于百万数据来说,树的深度还是太深)
hash表(hash算法这种适用于查询单条数据,根据key-value方式,但是不适用于范围查询)

B树

每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为null。

 

 

 B+树

只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针。

 

 

 后来,在B+树上增加了顺序访问指针,也就是每个叶子节点增加一个指向相邻叶子节点的指针,这样一棵树成了数据库系统实现索引的首选数据结构。

一般来说,索引很大,往往以索引文件的形式存储的磁盘上,索引查找时产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的时间复杂度。树高度越小,I/O次数越少。

那为什么mysql索引数据结构选择的是B+树而不是B树呢,因为它内节点不存储data,这样一个节点就可以存储更多的key。



在MySQL中,最常用的两个存储引擎是MyISAM和InnoDB,它们对索引的实现方式是不同的。

MyISAM

data存的是数据地址。索引是索引,数据是数据。索引放在XX.MYI文件中,数据放在XX.MYD文件中,所以也叫非聚集索引。

 

InnoDB

data存的是数据本身。索引也是数据。数据和索引存在一个XX.IDB文件中,所以也叫聚集索引。

 

 

引用:https://blog.csdn.net/zhuanzhe117/article/details/78039692

以上是关于mysql索引数据结构的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 专题:深入了解Mysql索引数据结构

mysql数据库怎么创建索引

MySQL索引和SQL调优

MySql索引及使用实现的数据结构

MySQL索引背后的数据结构及算法原理

深入理解Mysql索引底层数据结构与算法