MySQL索引的原理

目录

概述

相关算法

Hash算法

二叉树算法

平衡二叉树算法

BTREE树算法

MyISAM引擎 

InnoDB引擎


概述

1.一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上

2.这样的话,索引查找过程中要产生I/O消耗,相对于内存存取,I/O存取消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的渐进复杂度

3.换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数

相关算法

Hash算法

MySQL索引的原理_第1张图片优点:通过字段的值计算的hash值,定位数据非常快

缺点:不能进行范围查找,因为散列表中的值是无序的,无法进行大小的比较

二叉树算法

MySQL索引的原理_第2张图片

特性:分为左子树、右子树和根节点,左子树比根节点值要小,右子树比根节点要大

缺点:有可能产生不平衡 类似于链表的结构 

平衡二叉树算法

MySQL索引的原理_第3张图片

特点:

1. 他的左子树和右子树都是平衡二叉树

2.左子树比中间小,右子树比中间值大

3.左子树和右子树的深度之差的绝对值不超过1

缺点:

1.插入操作需要旋转

2.支持范围查找,但回旋查询效率低,比如要查找大于8的,会回旋到父节点7、10

3.如果存放几百条数据的情况下,树高度越高,查询效率越慢

BTREE树算法

目前大部分数据库系统及文件都采用B-TREE或者其变种B+TREE作为索引结构,BTREE结构可以有效地解决之前的相关算法遇到的问题

MySQL索引的原理_第4张图片

MyISAM引擎 

MyISAM引擎使用B+Tree作为索引结构,叶节点的data域放的是记录的地址

MySQL索引的原理_第5张图片

InnoDB引擎

InnoDB的叶节点的data域存放的是数据,相比MyISAM效率高一些,但是比较占硬盘内存大小 ,使用的也是B+Tree

MySQL索引的原理_第6张图片

 

 

 

 

你可能感兴趣的:(mysql,b树,数据库)