type
status
date
slug
summary
tags
category
icon
password
整理定义
什么是索引
一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。一本500页的书,如果你想快速找到其中的某一个知识点,在不借助目录的情况下,那我估计你可得找一会儿。同样,对于数据库的表而言,索引其实就是它的“目录”。——《MySQL 45讲》林晓斌
MySQL的索引
在MySQL中,索引是一种数据结构,它通过形成代表特定列或一组列的所有值的树结构(B树),为表的行提供快速查找能力。
InnoDB表总是有一个代表主键的聚簇索引。它们也可以有一个或多个定义在一个或多个列上的辅助索引。根据它们的结构,辅助索引可以被分类为部分索引、列索引或复合索引。
索引是查询性能的关键方面。数据库架构师设计表、查询和索引,以便快速查找应用程序所需的数据。理想的数据库设计在实际中使用覆盖索引;查询结果完全由索引计算得出,无需读取实际的表数据。每个外键约束也需要一个索引,以高效地检查父表和子表中是否存在值。
复述展开
在MySQL中,有以下几种索引:
索引类型 | 优点 | 缺点 | 使用场景 | 存储引擎 |
B-Tree | 广泛适用,支持全键值、键值范围和键值排序的搜索 | 不适合全文搜索 | 大多数情况下的查找、排序和范围查询 | InnoDB, MyISAM, Memory等 |
Hash | 快速的等值查询 | 不支持范围查询,不支持排序操作,冲突可能影响性能 | 等值比较,如哈希表 | Memory, NDB |
Fulltext | 支持复杂的文本搜索,包括模糊匹配 | 仅限于文本数据,占用空间较大 | 文本搜索 | InnoDB, MyISAM |
R-Tree | 支持空间数据的多维范围搜索和多维索引 | 仅适用于空间数据类型 | 地理空间数据查询 | MyISAM |
Spatial | 优化了空间数据的存储和查询 | 仅支持空间数据类型,不是所有存储引擎都支持 | 地理信息系统(GIS)数据 | InnoDB, MyISAM |
B-Tree 与 B+Tree
B-Tree(平衡树)和B+Tree是两种常用的索引和数据结构,它们在数据库系统中广泛应用于数据的组织、管理和索引。
B-Tree
B-Tree是一种自平衡的树数据结构,它维持数据的排序,允许搜索、顺序访问、插入和删除在对数时间内完成。B-Tree的特点包括:
- 每个节点有多个孩子,节点中的键值按顺序排列。
- 树的所有叶子节点都在同一层。
- 节点中的键值数目有一个上限和下限(除了根节点和叶子节点)。
- B-Tree通过分裂和合并节点来维持平衡。
B+Tree
B+Tree是B-Tree的一个变种,它具有B-Tree的所有特性,但在其结构上有所不同:
- 所有的数据记录都存储在叶子节点上,叶子节点形成了一个链表,便于进行全范围扫描。
- 非叶子节点(内部节点)仅存储键值信息,不存储数据记录,这意味着相比于B-Tree,B+Tree可以有更高的分支因子,使得树更加矮胖,减少了磁盘I/O次数。
- 叶子节点之间通过指针连接,这提供了顺序访问数据的能力。
B-Tree与B+Tree的区别
- 数据存储:B-Tree的数据存储在每个节点上,而B+Tree的数据仅存储在叶子节点上。
- 树的高度:B+Tree通常更矮胖,因为内部节点不存储数据,可以有更多的子节点。
- 范围查询:B+Tree由于叶子节点的链表结构,使得范围查询更加高效。
- 磁盘读写:B+Tree的查询性能更加稳定,因为所有查询都要查找到叶子节点,而B-Tree的查询可能在非叶子节点就结束了。
为什么MySQL选择使用B+Tree
MySQL选择使用B+Tree作为索引结构,主要是因为B+Tree在数据库索引中的几个优势:
- 高效的范围查询:由于叶子节点的链表结构,B+Tree特别适合处理范围查询,这在数据库操作中非常常见。
- 更少的磁盘I/O:B+Tree的内部节点不存储数据,可以拥有更多的分支,这减少了树的高度,从而减少了磁盘I/O次数,提高了查询效率。
- 查询性能稳定:B+Tree的所有查询都要走到叶子节点,这使得每次查询的磁盘读取次数相对固定,性能更加稳定。
理解体会
理解MySQL,必须要学习好MySQL中的索引,知道索引的数据结构,才能更好的对其进行优化与调整。
参考
快速跳转链接
【概念解析】启动
【概念解析】Day 1 - 10
【概念解析】Day 11 - 20
【概念解析】Day 21 - 30
【概念解析】Day 31 - 40
【概念解析】Day 41 - 50
【概念解析】Day 51 - 60
【概念解析】Day 61 - 70
【概念解析】Day 71 - 80
【概念解析】Day 81 - 90
- 作者:eachenkuang
- 链接:https://kuangyichen.com/article/industry-day67
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。