🗒️Day67【概念解析】 MySQL Index
00 分钟
2023-11-27
2023-11-29
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

notion image
B-Tree是一种自平衡的树数据结构,它维持数据的排序,允许搜索、顺序访问、插入和删除在对数时间内完成。B-Tree的特点包括:
  • 每个节点有多个孩子,节点中的键值按顺序排列。
  • 树的所有叶子节点都在同一层。
  • 节点中的键值数目有一个上限和下限(除了根节点和叶子节点)。
  • B-Tree通过分裂和合并节点来维持平衡。

B+Tree

notion image
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
 
上一篇
Day68 【概念解析】InnoDB Tablespace
下一篇
Day66【概念解析】InnoDB Data Dictionary

评论
Loading...