MySQL索引总结1

hash索引

优缺点

  • 查找效率高【数组下标】
  • 无法进行范围查找【hash是无序的值,只能进行全表扫描】
  • 无法进行排序操作

二叉查找树

二叉树是每个节点最多有两个子树的树结构,通常子树被称作左子树右子树。二叉树常被用于实现二叉查找树和二叉堆。
特点:

  • 每个节点都包含一个元素以及n个子树。
  • 左子树和右子树是有顺序的,次序不能任意颠倒,左子树的值小于父节点,右子树的值要大于父节点。

在这里插入图片描述
检索任何一个数据最多只需要访问3个节点,时间复杂度为O(longN),和二分法效率一样。

但是如果插入的数据是有序的,那么结构就会变成:
在这里插入图片描述
此时二叉树退化为了一个链表结构,查询数据最差变为O(N)。

优缺点

  • 查询数据的效率不稳定,若树左右比较平衡的时候,最差情况为O(logN),如果插入数据是有序的,退化链表查询时间为O(N)
  • 数据量大的情况下,会导致树的高度变高,如果每个节点对应磁盘的一个块来存储一条数据,需io次数会大幅增加。

平衡二叉树(AVL Tree)

平衡二叉树是一种特殊的二叉树,其次还具有如下特性:

  • 左右子树高度差不超过1
  • 左右子树是平衡二叉树

优缺点

  • 这保证了查询速度比较稳定,查询中遍历节点控制在O(logN)范围内
  • 如果在内存中查询比较高,存储在磁盘中,每个节点对应一个磁盘块,数据量大的时候,会导致二叉树变高,增加io次数 ,查询效率变低
  • 在数据的插入删除的过程中,平衡二叉树用了一系列的操作去维护了二叉树的平衡(在频繁变更的列上不适合建索引的原因),这需要IO和CPU的消耗。
  • 在树结构中数据处的深度决定着它搜索时IO次数搜索效率不足
  • 每个磁盘块(节点/页)保存的关键字数据量太少了。
  • 没有很好利用操作系统和磁盘数据交换特性和磁盘预读能力。(空间局部性原理)

B-树(多路平衡查找树)

B-树节点可以放多个元素,主要是为了降低树的高度【AVL树所存在的问题】。B-Tree结构的数据可以让系统高效的找到数据所在的磁盘块。多路:关键字+1。
在这里插入图片描述

B-Tree不利于范围查找,但是我们经常需要用到范围查找
存在回旋的问题【范围查找】

B+树

在这里插入图片描述

B+Tree的主要特征:

  • 叶子节点只存储key[index]不存储具体的数据
  • 最底层是叶子节点
  • 除叶子节点之外,其他节点不保存数据,只保存关键字指针
  • 叶子节点包含了所有数据的关键字以及data,叶子节点之间可以用链表连接起来–支持范围查找
    +通过链表解决回旋查找

MySQL InnerDB采用B+Tree的原因

  • B+Tree是B-Tree的变种,多路绝对平衡查找树,他拥有B-Tree的优势
  • B+Tree扫库、表能力更强:只需要扫描子结点
  • B+Tree的磁盘读写能力更强:一次IO的数据更多
  • B+Tree的排序能力更强
  • B+Tree的查询效率更加稳定

MySQL中B+Tree索引体现形式-MyISAM

在这里插入图片描述

所建的索引都是平级关系

MySQL中B+Tree索引体现形式-Innodb

在这里插入图片描述

在innodb中只有一个聚集索引–主键
数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。

在这里插入图片描述

《MySQL笔记–个人学习总结》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值