MySQL索引

本文详细介绍了MySQL中的索引类型,包括普通索引、唯一索引和联合索引,以及B+Tree和Hash索引的工作原理。B+Tree索引是InnoDB存储引擎的主要实现方式,其叶子节点存储所有键值,非叶子节点不存储数据,通过双向链表连接。而Hash索引适用于等值查询,不适合范围查询。文章还讨论了聚集索引和非聚集索引的区别,以及高效使用索引的策略和注意事项。
摘要由CSDN通过智能技术生成

一、索引类型

MySQL索引是一种特殊的数据结构,InnoDB的索引是表空间的一部分。索引保存着涉及所有记录的引用指针。按索引字段特性角度分类:

1、普通索引(index)

2、唯一索引

    主键索引(primary key)

    唯一索引(unique)

3、联合索引

    联合主键索引:primary key(id, name, age)

    联合唯一索引:unique(id, name)

    联合索引:index(id,name,age)

三、B+Tree索引和Hash索引

按索引数据类型分类,可以分为B+Tree索引、Hash索引、full-texts索引。

 * Innodb从5.6开始支持全文索引。

1. B+Tree索引

B+Tree由二叉查找树、平衡二叉树、B树演变而来。

★二叉查找树

如图所示,二叉查找树的节点存的是键值(key,索引字段的实际值)和数据(data,数据行)。

二叉树的特点:左子树的值<当前节点的值<右子树的值。顶端节点为根节点,没有子节点的节点为叶子节点。

如果要查id(索引字段)为12的数据,步骤如下:

1. 根节点id与12比较,10<12,选择右子树为当前节点;

2. 13>12,选择左子树为当前节点;

3. 12=12,取出索引中的data。

时间复杂度:

第1次折半:还剩n/2个元素

第2次折半:还剩n/4个元素

第3次折半:还剩n/8个元素

……

第k次折半:还剩n/2^k个元素

最坏的情况下,查到最后还剩1个元素才查出来,即n/2^k = 1。得k=logn。所以二叉树的时间复杂度为O(logn)。

★平衡二叉树

二叉树是可能退化成链表的,如下图。

如果要查id为17的用户,需要遍历所有节点,等效于全表扫描。

造成二叉树退化的原因是,结构不平衡,二叉树高度不稳定,从而导致查找效率不稳定。为了保证二叉树保持平衡,就要用平衡二叉树。

平衡二叉树又称AVL树,要求左右节点高度差不能超过1

当插入或者删除导致平衡二叉树不平衡的时候,它会调整结构来保持平衡。调整的方式为旋转节点位置。

平衡二叉树相比二叉树,查询效率更稳定,速度更快。但是保持平衡的旋转调整会消耗很多资源。平衡二叉树可以优化为红黑树。

★B树(Balance Tree)

MySql将数据和索引都存在磁盘中,相较于内存&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值