数据库面试三

3.索引

1.概念:

一种排好序,能够提升查询性能的数据结构

2.分类:

聚簇(集)索引:

索引和行数据都在一个叶子结点上

非聚簇(集)索引:

对应的只有主键值无数据

3.索引底层采用的是B+树

分析为什么采用B+树的流程(B+树流程如下)

3.1树结构对比:

1.二叉树:

左边的子节点比父节点小,右边的子节点比父节点大,当我们向二叉查找树保存数据时,是按照从大到小(或从小到大)的顺序保存的,此时就会形成一个单向链表,搜索性能会打折扣。

不支持范围搜索

2.红黑树(平衡二叉树)

不支持范围搜索

3.B树

因B树的每个节点都会存储数据,导致每个页所存储的数据量较少,想要存储大量数据会导致树的高度(层数)越来越高,从而导致查询的效率越来越慢

4.B+树

1.通过只在叶子节点上存储数据,让每个非叶子节点可以存储更多的索引值和指向下一个节点的指针(1170个)只需要三层结构就可以存储高达2000w的数据量

2.B+树的叶子节点又是一个双向链表,支持范围查询,从而进一步提升访问效率

4.主键索引

在使用InnoDB引擎的表一定需要主键,当未创建时,数据库会自动创建并维护一个主键索引

创建主键索引的列一般都是无意义的列

叶子节点----> 存储主键值

非叶子节点----> 存储行数据

在使用主键索引是推荐使用主键自增

1.插入的数据始终会放在最后面,可以快速的找到插入的位置,无需做额外的开销。

2.若不自增,就无法判断插入时具体插入到树中的哪一个位置,进而无法判断树中数据的变化和树的旋转,在查找数据时更加艰难

5.非主键索引

非叶子节点----> 存储索引列值

叶子节点

1.存储主键值

2.为什么费主键索引的叶子节点数据存储的是主键值

​ 2.1:不存储主键值,就会存储数据

​ 2.2:当数据发生了变化,不仅要维护主键索引,同时还需要维护其他索引(修改了一个索引的数据,会同时修改其他索引的数据,需要额外 的开销)

posted @ 2025-03-10 16:12  留梦&  阅读(44)  评论(0)    收藏  举报