码迷,mamicode.com
首页 > 数据库 > 详细

mysql索引数据结构

时间:2020-01-02 18:53:24      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:csdn   索引数据   mamicode   sam   评价   二叉树   不同的   ODB   复杂度   

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索引数据结构

标签:csdn   索引数据   mamicode   sam   评价   二叉树   不同的   ODB   复杂度   

原文地址:https://www.cnblogs.com/wanghq1994/p/12134329.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!