【MySQL高级篇笔记-索引的数据结构 (中) 】

此笔记为尚硅谷MySQL高级篇部分内容

目录

一、索引及其优缺点

1、索引概述

2、优点

3、缺点

二、InnoDB中索引的推演

1、设计索引

1.一个简单的索引设计方案

2.InnoDB中的索引方案

2、常见索引概念

1. 聚簇索引

2. 二级索引(辅助索引、非聚簇索引)

3. 联合索引

3、InnoDB的B+树索引的注意事项

1. 根页面位置万年不动

2. 内节点中目录项记录的唯一性

3. 一个页面最少存储2条记录

三、MyISAM中的索引方案 

MyISAM 与 InnoDB对比

小结

四、索引的代价

五、MySQL数据结构选择的合理性

全表遍历

Hash结构

二叉搜索树

AVL树

B-Tree

B+Tree

思考题 

R树

小结 

算法的时间复杂度


一、索引及其优缺点


1、索引概述

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。
索引的本质:索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。
这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法 

2、优点

(1)类似大学图书馆建书目索引,提高数据检索的效率,降低 数据库的IO成本 ,这也是创建索引最主要的原因。

(2)通过创建唯一索引,可以保证数据库表中每一行 数据的唯一性

(3)在实现数据的参考完整性方面,可以 加速表和表之间的连接 。换句话说,对于有依赖关系的子表和父表联合查询时,可以提高查询速度。

(4)在使用分组和排序子句进行数据查询时,可以显著 减少查询中分组和排序的时间 ,降低了CPU的消耗。

3、缺点

增加索引也有许多不利的方面,主要表现在如下几个方面:

(1)创建索引和维护索引要 耗费时间 ,并且随着数据量的增加,所耗费的时间也会增加。 (2)索引需要占 磁盘空间 ,除了数据表占数据空间之外,每一个索引还要占一定的物理空间, 存储在磁盘上 ,如果有大量的索引,索引文件就可能比数据文件更快达到最大文件尺寸。

(3)虽然索引大大提高了查询速度,同时却会 降低更新表的速度 。当对表中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的维护速度。因此,选择使用索引时,需要综合考虑索引的优点和缺点。

二、InnoDB中索引的推演


在没有索引的情况下,不论是根据主键列或者其他列的值进行查找,由于我们并不能快速的定位到记录所在的页,所以只能 从第一个页 沿着 双向链表 一直往下找,在每一个页中根据我们上面的查找方式去查找指定的记录。因为要遍历所有的数据页,所以这种方式显然是 超级耗时 的。如果一个表有一亿条记录呢?此时 索引 应运而生。

1、设计索引

1.一个简单的索引设计方案

2.InnoDB中的索引方案

① 迭代1次:目录项纪录的页

从图中可以看出来,我们新分配了一个编号为30的页来专门存储目录项记录。这里再次强调 目录项记录和普通的 用户记录 的不同点

相同点: 

② 迭代2次:多个目录项纪录的页

③ 迭代3次:目录项记录页的目录页

④ B+Tree

2、常见索引概念

索引按照物理实现方式,索引可以分为 2 种:聚簇(聚集)和非聚簇(非聚集)索引。我们也把非聚集索引称为二级索引或者辅助索引。

1. 聚簇索引

2. 二级索引(辅助索引、非聚簇索引)

 

 

3. 联合索引

3、InnoDB的B+树索引的注意事项

1. 根页面位置万年不动

理解形成过程

2. 内节点中目录项记录的唯一性


3. 一个页面最少存储2条记录

三、MyISAM中的索引方案 


MyISAM索引的原理图

MyISAM 与 InnoDB对比

小结

四、索引的代价


索引是个好东西,可不能乱建,它在空间和时间上都会有消耗:

  • 空间上的代价      
  • 时间上的代价

五、MySQL数据结构选择的合理性


全表遍历

Hash结构

 

Hash索引适用存储引擎如表所示:

二叉搜索树

如果我们利用二叉树作为索引结构,那么磁盘的IO次数和索引树的高度是相关的。

AVL树

B-Tree

B+Tree

B+ 树和 B 树的差异:

1. 有 k 个孩子的节点就有 k 个关键字。也就是孩子数量 = 关键字数,而 B 树中,孩子数量 = 关键字数+1。

2. 非叶子节点的关键字也会同时存在在子节点中,并且是在子节点中所有关键字的最大(或最小)。
3. 非叶子节点仅用于索引,不保存数据记录,跟记录有关的信息都放在叶子节点中。而 B 树中,
非叶子节点既保存索引,也保存数据记录 。
4. 所有关键字都在叶子节点出现,叶子节点构成一个有序链表,而且叶子节点本身按照关键字的大小从小到大顺序链接。

思考题 

思考题:为了减少IO,索引树会一次性加载吗?


思考题:B+树的存储能力如何?为何说一般查找行记录,最多只需1~3次磁盘IO


思考题:为什么说B+树比B-树更适合实际应用中操作系统的文件索引和数据库索引?


思考题:Hash 索引与 B+ 树索引的区别


思考题:Hash 索引与 B+ 树索引是在建索引的时候手动指定的吗? 

R树

小结 

算法的时间复杂度


同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。

高级篇笔记PDF自取

链接:https://pan.baidu.com/s/1pVqrTwIZFoED77i-EFmw6g?pwd=3333 
提取码:3333

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值