数据库回顾(十) 数据库索引(中)

149 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

大家好! 我是慕歌,一只想教你学习 后端技术的野生coder! 欢迎来到慕歌的数据库系列教程,希望通过这个教程带大家深入学习数据库技术,该教程所有知识点均来源于本人的日常学习与开发中,如有疑问请与我联系!

前言

在上一节的分享中,慕歌向大家分享关于数据库索引的知识,索引作为数据库底层数据存储的重要部分,为数据的快速检索查询提供了极大的帮助。不同的索引结构的存储逻辑还有所差异,他们在整个系统中扮演了不同的角色,主键索引索引作为索引中,乃至是数据存储结构中最重要的一种结构,通过主键索引构建最基础的数据查询逻辑,是所有查询得以快速执行的底层支撑。
其余索引,如唯一索引以及普通索引,是对主键索引的一种增强,通过利用主键索引的存储结构,以辅助其他索引的高速访问,其余索引中保存的是对主键索引的引用,真实查询数据时需要利用到主键索引中存储的全量数据。聚簇索引与非聚簇索引的区别也就在于此,真实存储全量数据的索引,被称之为聚簇索引,其余索引则是非聚簇索引。
以上是对索引分类以及特点的简单回顾,这一节我们将深入探讨索引的设计原则,以及底层设计逻辑是怎样的,其中将设计到底层的数据结构,以及一些设计规范。

索引设计

设计目的:

  • 索引设计用于快速查找的数据结构
  • 通过索引实现高效的数据约束
  • 加速关联数据间的查询效率,优化关联性查询
  • 加速分组以及排序的效率

**注意点:**索引的维护以及创建都是需要时间的,并且数据量越大耗费的时间相应更长;索引需要占据一定的存储空间,数据量越大,索引的数据量也会随之变多;数据发生变化的时候,数据的索引也会随之改变。

聚簇索引:

特点:
  • 使用记录主键的大小进行记录页的排序
  • 页内的记录按照主键的大小排序为单项链表
  • 数据页按照主键的顺序构建双向链表
  • 叶子节点中存放完整的数据页
优点:
  • 数据访问的速度更快,索引与数据存储在同一个B+树中,获取数据的数据比非聚簇更快
  • 对于主键数据相关的排序以及范围查询具有极快的访问的速度
  • 数据的链表连接,可以避免更多的磁盘IO加载
缺点:
  • 插入速度依赖于插入的位置,如果非有序性插入,将会出现索引树的大幅度调整
  • 更新主键的时候,可能破坏原索引结构,需要极高的代价重建

二级索引:

特点:

当需要完整数据的时候,需要进行回表操作,先找到主键索引中的主键,再根据主键索引寻找完整数据。

优点:

一定程度上优化数据查询的效率,在某些常用键上建立索引,能够有效的提升这些常用查询的执行效率,为获取执行时间的提升,牺牲一定空间是非常必要的。

INNODB索引

特点:
  • 根节点的不会改变,在数据插入的时候就会进行确定
  • 内节点中目录项的唯一性,为了确保新插入数据具有合理位置
  • 一个数据页最少存放两条数据

结语

这一节的分享到这里就结束了,下一节将带来数据库索引最终篇的分享学习!
如果您觉得本文不错,欢迎点赞支持,您的关注是我坚持的动力!