什么是索引
索引是一种数据结构,对数据库表中一列数据或者多列数据进行排序的一种结构,实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
索引的优缺点
索引能提高查询的速度
但是索引会降低更新表的速度
而且索引也会占据额外的磁盘空间
MySQL中索引底层的数据结构选择
当我们使用索引查询的时候不可能把整个索引全部加载到内存,只能逐一加载每个磁盘页,磁盘页对应索引树的节点
非关系型数据库MongoDB使用B树作为数据库索引
大部分关系型数据库,比如Mysql,则使用B+树作为索引
B树是一种多路平衡查找树,它的每一个节点最多包含K个孩子,k称为B树的阶。k的大小取决于磁盘页的大小
B树的每个节点都存k-1个元素和k个孩子
节点内部元素多一点也没有关系,仅仅是多了几次内存交互,只要不超过磁盘页的大小即可
B树在插入和删除节点的时候如果导致树不平衡,就通过自动调整节点的位置来保持树的自平衡
B+树是基于B树的一种变形,拥有者比B树更高的查询效率
有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点
在B+树中,每一个父节点的中的元素都出现在子节点中,是子节点的最大(或最小元素)
由于父节点的所有元素都出现在子节点,因此所有叶子节点包含了全量元素信息。并且每个叶