Mysql中的索引介绍

目录

索引

1、概念

2、索引的引入演示

3、索引结构的选择

4、索引的分类

1、mysql数据库索引

2、InnoDB引擎中索引

总结


索引

1、概念

        除了数据,mysql还维护着由特定算法实现的一种数据结构,这种数据结构通过某种方式指向数据,这种数据结构就是索引。索引是是一种用于提高数据库查询性能的数据结构,可以加快数据查询速度,减少io次数。

2、索引的引入演示

        在没有索引的情况下,我们查找某条数据是扫描整个表的数据再返回查找结果。当我们有索引(以二叉树为例)的情况下(mysql目前默认索引的数据结构为B+树),可以通过ceil(logm((m-1)*n + 1) <= h <= n-m+1次数就可以找到,下面通过图的方式看一下。

注:上述的公式为n个节点的m叉树高度计算公式,感兴趣的伙伴可以查找一下相关的资料。

演示一下查找26的情况:

Mysql中的索引介绍_第1张图片

如果没有索引的情况下要查找4次。

加入二叉树索引结构的情况下上图结构转变为下图所示,此时查找46只要2次。

Mysql中的索引介绍_第2张图片

通过上述结果可以知道,当采用B树时,查询所提高的效率之大。

        不过采用索引后也有对应的缺点,主要有两个,一是索引也需要占用内存空间,二是加入索引后,增删改效率会降低。这里粗略的解释一下为什么会降低,再加入索引后,我们增加或者修改删除都会影响到原本树的一个状态,比如是索引结构是二叉树的话,我们需要额外的去维护树的平衡,对应的,索引结构为B+树时,也需要额外的处理去维护B+树的状态。

        mysql的索引在存储引擎层实现的,不同的存储引擎对应的索引结构也不同,比如memory引擎采用的就是hash索引,不过由于hash结构的特性,hash索引只支持精确查询,不支持范围查询。

3、索引结构的选择

为什么InnoDB引擎的索引结构采用B+树?也就是Mysql默认的引擎所采用的索引结构,当然,这里也不是固定的,有时候Mysql会自动hash化采用hash索引结构去处理某个表的操作。

为什么不是二叉树?

Mysql中的索引介绍_第3张图片

解:如果是二叉树的情况下,当顺序插入时,会出现如下图情况,此时查找46还是得走全表。

为什么不是平衡二叉树?

Mysql中的索引介绍_第4张图片

解:二叉树当数据量大的时候,也就是节点数量多,此时树会非常高,查找效率相对来说也不高。

而B树为多叉路查找树,以度数为4的B树为例。22个节点仅两层,当度为5时,树的高度相对于二叉树的优化更加明显。

Mysql中的索引介绍_第5张图片

4、索引的分类

1、mysql数据库索引

  • 主键索引:也就是表的主键,mysql会自动为其创建一个主键索引,只能有一个
  • 唯一索引:表中带unique的字段
  • 常规索引:普通创建的索引
  • 全文索引:指查找文本中关键词的索引,而不是值

2、InnoDB引擎中索引

  • 聚集索引:存在主键索引则主键索引为聚集索引,不存在则看唯一索引,唯一索引也不存在的话InnoDb会自动创建一个rowid作为聚集索引。
  • 二级索引:这类索引的索引结构不带数据,指带对应数据的主键,然后需要通过主键去回表查询数据。

总结

关于Mysql的索引知识是比较多的,包括索引的使用情况、适用情况、生效情况等等,想要深入了解的伙伴可以查找一下详细的资料,本文只是简单的介绍一下Mysql的索引大致情况。

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