一、为什么要使用索引?
为了减少IO次数
二、为什么不使用二叉树?
减少IO次数。
我们创建的索引可能有几个G那么大,不可能一次性都加载到内存中,需要逐一加载磁盘页(一个磁盘页对应一个节点),二叉树的最坏查询复杂度取决于树的高度。数据量越大,二叉树越“高”,使用B+树而不使用二叉树的原因在于将一棵“瘦高树”替换为“矮胖树”。
三、实现索引的数据结构B(balance)+Tree
- mysql默认存储引擎:InnoDB
- 叶子节点:一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称“叶子”。又称为终端结点
mysql的数据都保存在磁盘上,创建索引的作用是为了快速定位磁盘块的位置,减少磁盘的访问次数,(访问一次内存的速度远快于访问一次磁盘)
系统磁盘以磁盘块为基本单位,InnoDB有页 的概念,页默认大小是16KB,而系统磁盘块达不到这么大,所以取N个地址连续的磁盘块作为一页。
- 两个指针:一个指向根节点,另一个指向最小的叶子节点
- 若一个节点有N个子树,那么此节点就包含N个关键字
- 叶子节点:所有的叶子节点中包含全部的关键字信息。叶子节点本身按照关键字的大小自小而大,按照顺序排列;叶子节点包括①关键字②指向含这些关键字记录的指针(指针指向该条记录在磁盘上的位置)
- 非终端节点:仅包含其子树中最大/最小的关键字 </