数据库面试三
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:当数据发生了变化,不仅要维护主键索引,同时还需要维护其他索引(修改了一个索引的数据,会同时修改其他索引的数据,需要额外 的开销)
浙公网安备 33010602011771号