MySQL之索引深度解析(上篇)

索引的常见构造方式

实现索引的途径有多种,下面先介绍三种常见的结构:哈希表、有序数组以及搜索树。

哈希表:仅适用于仅有等值查询的场景。

有序数组:在等值查询和范围查询场景下性能都很不错,但在更新数据时需要移动大量记录,所以只适用于静态存储引擎

二叉搜索树:树的层数可能会比较高,要是一个节点上的数据在一个物理数据块里,那么访问叶子节点的数据就会产生大量磁盘IO。

为了让一次查询尽可能少地进行磁盘IO,会用N叉树来替代二叉树。

到目前数据库技术发展来看,跳表、LSM树等结构也被应用到引擎设计中。得清楚数据库底层存储的核心是基于数据模型的,所以每遇到一个新数据库,得先关注它的数据模型,这样才能从理论上分析出这个数据库的适用场景。

InnoDB的索引构造

在InnoDB中,表都是按照主键顺序以索引的形式存储的。由于InnoDB采用了B+树索引模型,所以数据都存储在B+树里。

每一个索引在InnoDB中对应着一棵B+树。

依据叶子节点的内容,索引类型分为主键索引和非主键索引:

  • 主键索引的叶子节点存储的是整行数据。在InnoDB中,主键索引也被称作聚簇索引。

  • 非主键索引的叶子节点存储的是主键的值。在InnoDB中,非主键索引也被称作二级索引。

对于非主键索引,假如执行select *查询,那么得先查询非主键的索引树,得到主键后再查询一次,这个过程叫做回表。所以,应该尽量使用主键来查询。

索引维护

B+树为了维持索引的有序性,在插入新值的时候需要进行必要的维护。要是插入时所在的数据页已满,按照B+树的算法,这时候得申请一个新的数据页,然后挪动部分数据过去,这个过程叫做页分裂,会对性能产生较大影响。同时,页分裂还会影响数据页的利用率,原本放在一个页的数据,分到两个页中,整体空间利用率大概会降低50%。

页分裂的逆过程是页合并。当相邻两个页因为删除了数据,利用率很低之后,会把数据页进行合并。

基于索引维护,来探讨哪些场景应该使用自增主键,哪些情况不应该用。

当设置了自增主键,插入的时候可以不指定主键值,而且插入符合递增插入,每次插入都是一次追加操作,不会挪动其他记录,也不会触发叶子节点的分裂。而用有业务逻辑的字段做主键,往往没法保证有序插入,这样就可能出现页分裂。

除了考虑性能,从存储空间的角度来看,自增主键的字节数通常也比较小,那么普通索引的叶子节点就会更小,占用的空间也会更少。

所以,从性能和存储空间方面考虑,自增主键往往是更合理的选择。而有些业务场景,比如要求只有一个唯一索引,那么该索引列自然就作为主键了。

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/13065.html

(0)
LomuLomu
上一篇 2025 年 8 月 5 日
下一篇 2025 年 8 月 6 日

相关推荐

  • IDEA破解实战演示与激活码配置指南

    本教程适用于IDEA、PyCharm、DataGrip、Goland等,支持Jetbrains全家桶! 废话不多说,先上最新 IDEA 版本破解成功的截图,如下,可以看到已经成功破解到 2099 年辣,舒服! 接下来,我就将通过图文的方式, 来详细讲解如何激活 IDEA至 2099 年。 当然这个激活方法,同样适用于之前的旧版本! 不管你是什么操作系统,什么…

    IDEA破解教程 2025 年 11 月 11 日
    18900
  • 2026年 CLion 破解激活成功率提升技巧

    重要提示:本文所涉及的Clion破解补丁与激活码均来源于网络收集,仅限个人学习研究使用,严禁用于商业用途。如条件允许,强烈建议支持正版软件!若涉及侵权问题,请联系作者删除相关内容。 话不多说,先来看Clion2025.2.1版本破解成功的实况截图,如图所示,许可证有效期已激活至2099年,效果相当理想! 下面将通过图文详解的方式,为大家演示最新版Clion的…

    2026 年 4 月 7 日
    12600
  • pycharm激活码输入报错?试试pycharm破解工具

    PyCharm 2025.2.1 永久激活指南:图文详解破解全流程(附补丁与激活码) 重要声明:本文所涉及的 PyCharm 破解补丁及激活码资源均来源于网络收集,严禁用于任何商业用途,仅限个人学习研究使用。若涉及侵权内容,请联系原作者删除。经济条件允许的情况下,强烈建议购买 JetBrains 官方正版授权支持开发者! 话不多说,先呈上 PyCharm 2…

    PyCharm激活码 2026 年 3 月 19 日
    10800
  • 详细步骤教你领取最新版goland激活码,2025破解教程

    申明:本教程 GoLand破解补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版 ! GoLand是 JetBrains 推出的开发编辑器,功能强大,适用于 Windows、Mac 和 Linux 系统。本文将详细介绍如何通过破解补丁实现永久激活,解锁所有高级功能。 不管你是什么版本、什么操作系统。都…

    2025 年 10 月 23 日
    29900
  • 最新pycharm破解方案优化+永久激活码支持

    申明:本教程 PyCharm破解补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版 ! PyCharm是 JetBrains 推出的开发编辑器,功能强大,适用于 Windows、Mac 和 Linux 系统。本文将详细介绍如何通过破解补丁实现永久激活,解锁所有高级功能。 不管你是什么版本、什么操作系统…

    PyCharm激活码 2025 年 12 月 30 日
    20300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信