【Mysql】【高级篇】【第6章 索引】

https://www.bilibili.com/video/BV1iq4y1u7vj?p=115

1.为什么使用索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
索引的作用:减少磁盘I/O次数

2.索引及其优缺点

2.1 索引概述

在这里插入图片描述
排好序的快速查找数据结构

2.2 优点

在这里插入图片描述

2.3 缺点

在这里插入图片描述
在这里插入图片描述

(1)创建和维护耗时
(2)索引站磁盘空间
(3)更新表时,需要维护索引,耗时


3.InnoDB中索引的推演

https://www.bilibili.com/video/BV1iq4y1u7vj?p=116&spm_id_from=pageDriver

声明:

  • 索引在具体的存储引擎中实现,不同存储引擎中 索引底层数据结构是不同的;
  • 5.5之后默认使用InnoDB,所以这里讲解InnoDB的索引

3.1 索引之前的查找

先来看一个精准匹配的sql:

select 【列名列表】from 表名 where 列名 = xxx;

1.在一个页中查找

在这里插入图片描述

  • 底层是链表结构,一个记录对应一个节点

2.在很多页中查找

在这里插入图片描述
在这里插入图片描述

  • 数据页之间是双链表结构,一页为一个节点
  • 一个书架就相当于一个数据页

3.2 设计索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.一个简单的索引设计方案(构建页目录)

数据页
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据页目录
在这里插入图片描述
在这里插入图片描述
至此,针对数据页做的简易目录就搞定了;这个目录有一个别名,就叫做索引

构建页目录总结:

  1. 数据页之内 以及 之间,数据必须是单调递增的
  2. 数据页的编号并不是连续的,通过双向链表的方式连接
  3. 页分裂:数据页之间必须保证数据的单调关系,因此在insert的时候导致记录在页之间移动的现象 叫做页分裂
  4. 数据页的目录结构: key: 数据页中最小值 value:数据页编号
  5. 定位记录的两次 二分查找: 在目录页中定位数据页,在数据页中定位记录

2.InnoDB中索引方案

1.迭代1次 :数据页 和 目录页

使用数据页的设计方式来设计目录页
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

目录页设计总结:

  • 和数据页用同样的思想设计目录页
  • 目录页中 记录单元是 目录项 , 其RecordType = 1
  • 数据页中 记录单元是 数据项 , 其RecordType = 0
  • 目录项只包含 key-value,key是对应数据页最小索引值,value是对应数据页编号
  • 数据项除了字段 还有额外信息,并且字段个数是不固定的
2.迭代2次 :多目录页

在这里插入图片描述
在这里插入图片描述

3.迭代3次 :目录页的目录页

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. B+ Tree 成形!

在这里插入图片描述

总结:

  • B+树每一个节点表示一次IO
  • 树的层次越低,IO次数越少;因为每一个页是一次IO
  • B+树能够存储的记录数 = 数据页可存记录数 * 目录页可存记录数 ^ (层数 - 1)

3.3 常见索引概念

https://www.bilibili.com/video/BV1iq4y1u7vj?p=118&spm_id_from=pageDriver
在这里插入图片描述

1.聚簇索引(☆☆☆☆☆)

定义
在这里插入图片描述

  • 聚簇索引 指的是一种数据存储方式:用户记录完整的存储在B+ Tree的叶子节点 ;
  • 反应在InnoDB存储引擎中,.idb 文件既有数据也有索引,二者存储在一起,所以是聚簇索引,MyISAM 是将索引和数据分成两个文件存储,所以是非聚簇索引

B+ Tree 聚簇索引
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

二级索引结构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 二级索引的回表查询

二级索引的叶子节点的数据项 只存储 : 建立索引的列 + 主键
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


3.联合索引

  • 索引的存储方式只分为聚簇索引和非聚簇索引;
  • 联合索引指的是用多个字段联合作为索引key,因此若不是联合主键,联合索引就是非聚簇索引;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


3.4 InnoDB的B+树索引注意事项

1.根页面万年不动

在这里插入图片描述

2.内节点目录项唯一性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二级索引的索引 key 其实是非主键+主键


3.一个页面最少有两个记录

在这里插入图片描述

4. MyISAM的索引方案

在这里插入图片描述

4.1 MyISAM索引原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.2 MyISAM和InnoDB对比

在这里插入图片描述

5. 索引的代价

在这里插入图片描述

6.Mysql数据结构选择的合理性

在这里插入图片描述

6.1 全表遍历

6.2 Hash结构

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3 二叉搜索树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.4 AVL树

在这里插入图片描述
在这里插入图片描述

6.5 B-Tree

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.6 B+Tree

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.7 R树

在这里插入图片描述

6.8 小结

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值