Mysql数据库索引总结

Mysql数据库索引

常见的索引实现原理
1.hash表

使用hash函数生成数据的存储地址,查询数据时可通过hash函数获取数据的存储地址直接获取数据,时间复杂度为O(1),存在问题就是会产生碰撞,不同的数据通过hash函数可能产生相同的存储地址,此时通过建立链表链接相同地址的数据
优点:时效高
缺点:范围查找实现效率极低(需要读取所有表数据进行计算返回结果)

2.二叉查找树

构建二叉查找树,树中结点的数据左小右大,时间复杂度为O(log2n)
优点:时效高
缺点:根节点选取不当造成二叉查找树失衡,导致二叉树链表化,数据查询复杂度变为O(n),范围查找效率低

3.平衡二叉树

避免二叉查找树的缺点,自动构造二叉树时二叉树总是保持平衡状态,左右高度相差不超过1
优点:解决了二叉查找树失衡问题
缺点:二叉树的层数决定IO操作的次数,数据量大时二叉树层数极大过多IO操作导致查找效率不高

4.B-树

在平衡二叉树的基础上改善,每个结点存储多个数据,减少树的高度
优点:减少了树的高度,减少了查找时的IO操作,提高了效率
缺点:范围查找效率不高,需要多次查询树

5.B+树

对B树进一步优化,所有非叶子结点不存储数据,所有叶子结点之间通过双向指针构成双向链表
优点:再一次降低了树的高度,由于Mysql处理数据的最小单位为页(默认16k),非叶子结点中不保存数据就可以多保存索引key值,降低树的高度。
且范围查找可不需要查询树,直接通过双向链表读取数据减少了IO操作。

mysql数据库默认使用的索引结构为B+树

MyISAN与InnoDB的聚簇索引、辅助索引实现

MyISAN存储引擎的索引与数据文件分开保存,当MyISAN使用B+树建立聚簇索引时,所有叶子结点key为主键值,数据为键值所在行的地址。辅助索引与聚簇索引的唯一区别就是键值可以重复,等值查询也需要采用范围查询的方式查询

每个InnoDB表都有一个聚簇索引,由于Innodb的数据与索引均保持在同一文件,所以与MyISAN不同的地方在于叶子结点的数据为整行数据,而辅助索引中的数据为主键值,通过查询辅助索引获取主键值然后再通过主键值查询聚簇索引获取行数据,这个过程称为回表,会消耗过多的资源

参考博文
参考博文2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值