MySQL学习-InnoDB中的索引(五)

72 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情

前言

上篇我们学习了MySQL中的InnoDB的索引。有兴趣的小伙伴可以阅读(MySQL学习-InnoDB中的索引(四))。
下面我们继续学习MySQL中的InnoDB的索引。

InnoDB中的索引

上一节提到了B+树,下面学习一下B+树。

B+树

一个B+树的节点可以分为很多层,规定最下面的那层,也就是存放我们数据记录的那层为第0层,之后依次往上加。之前我们做了一个极端的假设,存放用户记录的页最多放3条记录,存放目录项的页最多放1条记录。其实真实环境中一个也存放的记录梳理是非常大的,假设所有存放用户记录的叶子节点代表的数据页可以存放100条数据记录,所有存放目录项记录的内节点代表的数据页可以存放1000条目录项记录,那么:

  • 如果B+树只有1层,也就是只有1个用于存放数据记录的节点,最多能存放100条记录。
  • 如果B+树有2层,最多能存放1000*100=100000条记录。
  • 如果B+树有3层,最多能存放10001000100=100000000条记录。
  • 如果B+树有4层,最多能存放100010001000*100=100000000000条记录。非常多的存储数量。

一般情况下,表里不会存放这么多的记录,所有我们用到的B+树都不会超过4层,那我们通过主键值去查找某条记录最多只需要做4个页面内的查找,查3个目录项的页和一个数据记录的页,又因为在每个页内有page Directory页目录,所以在页面内也可以通过二分法实现快速定位记录。

下节学习常见的索引有哪些?今天先学习到这里,明天继续。