Mysql数据库索引介绍(一)

针对索引,首先给大家介绍下索引的几种类型概念:
1) 聚簇索引或聚集索引:在索引中既有索引字段的数据也存储非索引字段的数据为聚簇索引,针对表数据,只有主键索引属于聚簇索引,即一张表只有一个聚簇索引也就是主键索引(innodb存储引擎是这种机制,在Myisam存储引擎中主键索引也是非聚簇索引,所有的索引都是非聚簇索引,其索引只保留索引字段信息,非索引字段数据是与索引字段信息分开存储)即聚簇索引包含所有数据,在innodb存储引擎数据文件结构就是聚簇索引和二级索引;
2) 二级索引、稀疏索引:人工创建的普通索引叫稀疏索引或二级索引,其索引中的叶子节点存储的即是聚集索引的值;
3) 回表:使用二级索引的流程即为通过二级索引查找到的为主键索引的值,再通过值去主键索引中查找对应的数据。此过程即是回表。

Mysql按索引的底层实现算法分类主要分为B+Tree和hash算法两种。
B+Tree:
其算法可以理解为是B Tree算法的升级或变种,以表user为例
其结构为(id int,name varchar(25),age int),其中id为主键
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200731170604184.png
以B Tree为例,按主键索引其user表中的数据展示为:
在这里插入图片描述通过以上图示发现:
1) 其数据左右到右是递增有序的;
2) 每个节点存放对应的数据(name,age)。
以B+ Tree为例,按主键索引其user表的数据展示为:
在这里插入图片描述通过以上图示发现:
1) 其数据左右到右是递增有序的;
2) 只有叶子节点存放对应数据(name,age),非叶子节点不存储数据,只有索引信息;
3) 在叶子节点中,相邻的叶子节点使用双向指针连接。
故在mysql中使用B+tree相比B Tree的优势:
1) 非叶子节点不存储数据可以用于存放更多的索引;
2) 相邻叶子节点使用双向指针可提升区间的访问性能,减少扫描次数。
二级索引:通过为user表的name字段创建普通索引,其索引结构信息为:

在这里插入图片描述其查找数据的流程也就是回表:通过name条件在此索引结构查找到对应的叶子节点后,获取对应的聚簇索引或主键的id,通过这个id值再去聚簇索引中查找对应的所有数据。

Hash索引:
其原理即是通过对应的索引字段(以name字段为例)进行一次hash计算,通过计算后的hash值来进行高效查询,适合等值查询或in查询
但数据量很大的时候,可能会出现较多的hash冲突的问题,即是对字段进行hash计算得到的hash值相同,解决办法就是相同的值通过链表的机制进行连接

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值