讲师:尚硅谷
-
宋红康(江湖人称:康师傅)
官网:
http://www.atguigu.com
1. 为什么使用索引
索引是数据结构
目的是为了减少磁盘I/O的次数,加快查询速率
2. 索引及其优缺点
2.1 索引概述
MySQL
官方对索引的定义为:
索引(
Index
)是帮助
MySQL
高效获取数据的数据结构
。
索引的本质:
索引是数据结构。你可以简单理解为
“
排好序的快速查找数据结构
”
,满足特定查找算法。
这些数据结构以某种方式指向数据, 这样就可以在这些数据结构的基础上实现
高级查找算法
。
索引是在存储引擎中实现的,因此每种存储引擎的索引不一定相同
3.1 B+Tree
④
B+Tree
一个
B+
树的节点其实可以分成好多层,规定最下边的那层,也就是存放我们用户记录的那层为第
0
层,
之后依次往上加。之前我们做了一个非常极端的假设:存放用户记录的页
最多存放
3
条记录
,存放目录项记录的页
最多存放
4
条记录
。其实真实环境中一个页存放的记录数量是非常大的,假设所有存放用户记录的叶子节点代表的数据页可以存放
100
条用户记录
,所有存放目录项记录的内节点代表的数据页可以存放
1000
条目录项记录
,那么:
如果 B+ 树只有 1 层,也就是只有 1 个用于存放用户记录的节点,最多能存放 100 条记录。 如果 B+ 树有 2 层,最多能存放 1000×100=10,0000 条记录。如果 B+ 树有 3 层,最多能存放 1000×1000×100=1,0000,0000 条记录。如果 B+ 树有 4 层,最多能存放 1000×1000×1000×100=1000,0000,0000 条记录。相当多的记录!!!
你的表里能存放
100000000000
条记录吗?所以一般情况下,我们
用到的
B+
树都不会超过
4
层
,那我们
通过主键值去查找某条记录最多只需要做
4
个页面内的查找(查找
3
个目录项页和一个用户记录页),又因为在每个页面内有所谓的
Page Directory
(页目录),所以在页面内也可以通过
二分法
实现快速定位记录。