mysql索引本质

1、索引帮助mysql高效获取数据排好序的数据结构。mysql

2、索引存储位置:磁盘文件。sql

3、索引结构:二叉树、红黑树、hash、BTree、B+Tree 。索引结构为了更快找到目标数据。数组

4、数据结构数据结构

4.一、二叉树函数

定义:每一个结点最多有两个子树,左子树比父节点小,右子树比父节点大。优化

缺点:会出现极端状况致使整棵树只有左子树或只有右子树。指针

图:blog

 

4.二、红黑树索引

定义:get

性质1. 节点是红色或黑色。
性质2. 根节点是黑色。
性质3 每一个红色节点的两个子节点都是黑色。(从每一个叶子到根的全部路径上不能有两个连续的红色节点)
性质4. 从任一节点到其每一个叶子的全部路径都包含相同数目的黑色节点。

缺点:数据量大会致使树层数比较多,这样就会形成查找数据慢。

图:

 

4.三、hash数据结构

定义:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它经过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫作散列函数,存放记录的数组叫作散列表。 对目标值进行hash运算获得hash值和数据磁盘指针地址保存到hash表,这样就达到快速定位数据位置。

缺点:精确查找十分快速,但范围查找就碰壁了。

图:无

4.四、BTree

定义:一个节点能够存储多个数据,这样能够避免黑红树的缺点,树的层数很变小。  

缺点:  节点里面数组数据:每一个数据的结构=索引数据+数据记录(即叶子节点存储键值和数据记录)。

图:

 

4.五、B+Tree

定义:B+Tree是在B-Tree基础上的一种优化。节点里面数组数据:每一个数据只存储键信息,这样不存数据能够腾出空间放更多的键信息,让树层数越小。

  • 非叶子节点只存储键信息。
  • 全部叶子节点之间都有一个链指针。
  • 数据记录都存放在叶子节点中。

缺点:无

 图:

 

5、mysql采用B+Tree数据结构存储数据

5.一、B+TREE叶子节点指针做用:定位值比它大的叶子节点。

5.二、引伸出为何mysql "!="或者“<>” 不走索引。从下图能够知道缘由,由于B树的左节点是比右节点小,并且节点有指针很快能找到范围的数据,B树特性+指针的配合这样能够快速找到指定范围数据。

图:

6、mysql为何用整型自增做为索引比较好。而UUID做为索引效率比较低?

  • 索引存储在磁盘,并且树的每一个节点分配的空间有大小。整型占空间比较小,这样能够存放多个键值。反之而后UUID占空间比较大。
  • 整型比较方便,UUID比较须要先转成ASCII在进行比较
相关文章
相关标签/搜索