Mysql中的索引介绍
目录
索引
1、概念
????????除了数据,mysql还维护着由特定算法实现的一种数据结构,这种数据结构通过某种方式指向数据,这种数据结构就是索引。索引是是一种用于提高数据库查询性能的数据结构,可以加快数据查询速度,减少io次数。
2、索引的引入演示
????????在没有索引的情况下,我们查找某条数据是扫描整个表的数据再返回查找结果。当我们有索引(以二叉树为例)的情况下(mysql目前默认索引的数据结构为B+树),可以通过ceil(logm((m-1)*n + 1) <= h <= n-m+1次数就可以找到,下面通过图的方式看一下。
注:上述的公式为n个节点的m叉树高度计算公式,感兴趣的伙伴可以查找一下相关的资料。
演示一下查找26的情况:
如果没有索引的情况下要查找4次。
加入二叉树索引结构的情况下上图结构转变为下图所示,此时查找46只要2次。
通过上述结果可以知道,当采用B树时,查询所提高的效率之大。
????????不过采用索引后也有对应的缺点,主要有两个,一是索引也需要占用内存空间,二是加入索引后,增删改效率会降低。这里粗略的解释一下为什么会降低,再加入索引后,我们增加或者修改删除都会影响到原本树的一个状态,比如是索引结构是二叉树的话,我们需要额外的去维护树的平衡,对应的,索引结构为B+树时,也需要额外的处理去维护B+树的状态。
????????mysql的索引在存储引擎层实现的,不同的存储引擎对应的索引结构也不同,比如memory引擎采用的就是hash索引,不过由于hash结构的特性,hash索引只支持精确查询,不支持范围查询。
3、索引结构的选择
为什么InnoDB引擎的索引结构采用B+树?也就是Mysql默认的引擎所采用的索引结构,当然,这里也不是固定的,有时候Mysql会自动hash化采用hash索引结构去处理某个表的操作。
为什么不是二叉树?
解:如果是二叉树的情况下,当顺序插入时,会出现如下图情况,此时查找46还是得走全表。
为什么不是平衡二叉树?
解:二叉树当数据量大的时候,也就是节点数量多,此时树会非常高,查找效率相对来说也不高。
而B树为多叉路查找树,以度数为4的B树为例。22个节点仅两层,当度为5时,树的高度相对于二叉树的优化更加明显。
4、索引的分类
1、mysql数据库索引
- 主键索引:也就是表的主键,mysql会自动为其创建一个主键索引,只能有一个
- 唯一索引:表中带unique的字段
- 常规索引:普通创建的索引
- 全文索引:指查找文本中关键词的索引,而不是值
2、InnoDB引擎中索引
- 聚集索引:存在主键索引则主键索引为聚集索引,不存在则看唯一索引,唯一索引也不存在的话InnoDb会自动创建一个rowid作为聚集索引。
- 二级索引:这类索引的索引结构不带数据,指带对应数据的主键,然后需要通过主键去回表查询数据。
总结
关于Mysql的索引知识是比较多的,包括索引的使用情况、适用情况、生效情况等等,想要深入了解的伙伴可以查找一下详细的资料,本文只是简单的介绍一下Mysql的索引大致情况。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!