MySQL索引的数据结构

讲师:尚硅谷 - 宋红康(江湖人称:康师傅)
官网: http://www.atguigu.com

1. 为什么使用索引

索引是数据结构

目的是为了减少磁盘I/O的次数,加快查询速率


2. 索引及其优缺点

2.1 索引概述

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

3.1 B+Tree

MySQL索引的数据结构_第1张图片

MySQL索引的数据结构_第2张图片

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 (页目录),所以在页面内也可以通过 二分法 实现快速定位记录。

你可能感兴趣的:(java,数据库)