索引与书架、新华字典的爱恨情仇

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在MySQL中,索引是提升查询速度的关键技术。根据存储类型,索引分为聚簇索引和非聚簇索引。聚簇索引将数据按索引顺序存储在磁盘上,查询主键时效率极高;非聚簇索引则通过索引项指向实际数据位置,适用于多条件查询。本文详细解释这两种索引的工作原理及应用场景,并介绍InnoDB和MyISAM存储引擎的实现方式。

在MySQL的索引世界中,性能优化一直是开发者们关注的焦点。而索引,作为提升查询速度的关键技术之一,是非常重要的。索引根据存储类型可以分为聚簇索引(聚集)与非聚簇索引(非聚集),它们决定了数据在磁盘上的存储方式和查询时的访问路径。本文将带你深入了解这两种索引类型,用最简单的语言解释它们的工作原理和应用场景。

聚簇索引:


添加图片注释,不超过 140 字(可选)


想象一下,你有一个书架,上面按照书名的字母顺序排列了所有的书籍。当你想找到某本书时,你只需要按照字母顺序查找,很快就能找到。这个书架就相当于数据库中的聚簇索引。

在聚簇索引中,数据实际上就是按照索引的顺序存储在磁盘上的。也就是主键与数据在一起并存储在磁盘上。类似书本就是数据、书名类似主键,它们在一起并放置在书架上。当然这里的主键更准确应该是书的编号。

工作原理


添加图片注释,不超过 140 字(可选)

聚集索引的叶子节点直接存储表的实际数据行,也就是数据行的物理存储顺序与索引的逻辑顺序是一致的。因此,当你通过主键进行查询时,MySQL可以直接定位到数据行所在的物理位置,大大提高了查询效率。

  1. 关键字(Keys):用于维护树中数据顺序的标识符。
  2. 子节点指针(Child Pointers):指针指向节点的子节点。在B+树中,每个非叶子节点的子节点指针数量总是比关键字的数量多一个。

非聚簇索引:

再想象一下,你有一个目录,类似的里面记录了书架上每本书的位置哪一排、哪一层。当你想找到某本书时,你先查找目录,找到书的实际位置,然后去书架上取书。这个笔记本就相当于数据库中的非聚簇索引。

其实还有个例子也非常形象,就是新华字典。


添加图片注释,不超过 140 字(可选)


新华字典是按照拼音或部首来组织汉字的,每个字都有一个对应的索引项,告诉你这个字在字典中的具体页码。当你想要查找一个字时,你可以先查看字典的目录,找到这个字的页码,然后直接翻到那一页查找。在这个过程中,索引项并不包含字的完整解释,只是提供了一个指向字典正文中字的位置的“指针”。

在MySQL中,非聚簇索引就是这样的“新华字典”,它的叶子节点存储的是索引列的值和对应数据行的指针,而不是数据行本身。


工作原理


添加图片注释,不超过 140 字(可选)


非聚集索引的叶子节点不直接存储数据行,而是存储索引键值和指向数据行位置的逻辑指针。当你通过非聚簇索引进行查询时,MySQL首先在索引中找到匹配的索引项,然后根据索引项中的指针去数据表中获取完整的数据行。这个过程通常被称为“回表”。

MySQL是如何实现聚簇/非聚簇索引的?

存储引擎


添加图片注释,不超过 140 字(可选)


聚簇索引和非聚簇索引的实现依赖于存储引擎。不同的存储引擎有不同的实现方式。最常用的存储引擎是InnoDB和MyISAM,它们分别实现了聚簇索引和非聚簇索引。当然除了最常用的存储引擎外MySQL还支持其它的存储引擎。

数据结构


添加图片注释,不超过 140 字(可选)


  • InnoDB存储引擎

InnoDB是MySQL默认的存储引擎之一,它使用B+树作为索引结构。InnoDB的聚簇索引(Clustered Index)实际上是表数据本身,它的叶节点包含了行数据。

  • MyISAM存储引擎

MyISAM是MySQL的另一个存储引擎,它同样使用B+树作为索引结构。MyISAM的索引文件和数据文件是分开的,索引仅包含指向数据的指针。



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
【海贼王的数据航海】栈和队列
【海贼王的数据航海】栈和队列
41 0
|
7月前
|
存储
【海贼王的数据航海】顺序表
【海贼王的数据航海】顺序表
35 0
|
安全 Java 编译器
学妹不懂Java泛型,非让我写一篇给她看看(有图为证)
笔者有个学妹就遇到了相同的境遇,学弟被泛型搞得头晕目眩,搞不懂泛型是个啥玩意。天天用的泛型也不知道啥玩意(她可能都不知道她有没有用泛型)。立图为证!当然,笔者深度还欠缺,如果错误还请指正!
148 0
学妹不懂Java泛型,非让我写一篇给她看看(有图为证)
2021牛客国庆集训派对day1E Removal(dp 去重)
2021牛客国庆集训派对day1E Removal(dp 去重)
81 0
|
数据格式
UPC新生赛—— 排序(思维)
UPC新生赛—— 排序(思维)
116 0
|
C语言
《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
《C游记》 番外篇(贰)结构思维禅性稳 四众皆倡结构体
140 0
|
算法
《C游记》 番外篇(壹)二分查找显神威 猜数游戏趣味生
《C游记》 番外篇(壹)二分查找显神威 猜数游戏趣味生
143 0
|
存储 Java
我与阿里云的爱恨情仇
笔者本人毕业于一个很普通的三本院校,是计算机专业的学生
331 1
|
Java 程序员 应用服务中间件
程序员相亲失败,只因请对方吃肯德基而被嫌弃,最后被怒删
今天看到一个有趣的话题,一个粉丝投稿: “我是程序员,今天相亲时被对方嫌弃了,最后她删了我”。 楼主男生,第一次见面时请对方吃肯德基,女生吐槽了他很多,最后删了他···看看他俩的聊天记录,你们品品。
987 0

热门文章

最新文章