数据库索引

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

分类:
聚簇索引(主键索引) --索引和行数据都在一个叶子节点上
非聚簇索引(非主键索引)--索引对应存储的数据是主键值

索引底层采用的是B+树:
为什么不用hash:因为hash只支持等值查询,不支持范围查询
B树:
非叶子节点:父节点
叶子节点:没有子节点的节点

  节点存储的包括索引值和行数据:索引8B  --行数据1K  --总共1032B

  mysql:
        以页来存储数据,一页大小为16K,而索引大小约8B,数据大小约1K,所以一页【16*1024/(8+1024)B=1024B】,每页可容纳的记录数为15
        想要存储大量数据,树的高度会越来越高,那么在查询的时候,走的路径就越长,查询效率就越慢。

B+树:
非叶子节点:
存储的是索引值和指向下个索引值的指针:索引值:8B --指针6B --总共14B
一个节点可存储储【16*1024B/14B】=1170

  叶子节点:
          存储索引值和数据    --8B + 1024B
          会冗余存储非叶子节点的索引值
          节点之间有指针【双向链表】,提升区间访问效率

为什么选择B+树:
非叶子节点和叶子节点存储的数据不一样,可以使用尽量深度低的树存储大量的数据,树的深度越低,查询的次数就越少,性能就越高
叶子节点是一个双向链表,支持范围查询,也能够提升访问效率

posted @ 2025-03-10 16:11  飞天白鸽  阅读(9)  评论(0)    收藏  举报