【Mysql】索引相关基础知识(一)
❓索引是什么?
索引类似于书本的目录,可以帮助你快速定位到目标内容。在关系数据库中,索引是一种数据结构,用于将数据按照一定的规则排序,从而加速数据的查找和访问。
特点:
- 通过索引,可以快速找到目标数据,而无需全表扫描。
- 索引的本质是以增加存储开销和维护成本为代价来换取查询性能的提升,体现了典型的“以空间换时间”的思想。
索引的分类
根据不同的维度,索引可以分为以下几类:
1. 按数据结构分类
- B+树索引:常见的默认索引结构,适用于范围查询。
- Hash索引:基于哈希表实现,适合等值查询,但不支持范围查询。
- 全文索引(Full-text):用于对大段文本进行全文搜索。
2. 按物理存储分类
- 聚集索引(Clustered Index):数据和索引存储在一起,表数据按照索引排序,主键索引通常为聚集索引。
- 非聚集索引(Non-clustered Index):索引和数据分开存储,索引指向实际的数据位置。
3. 按字段特性分类
- 主键索引(PRIMARY KEY):表中唯一的标识,默认创建聚集索引。
- 唯一索引(UNIQUE):保证索引列的值唯一,可以有多个。
- 普通索引(INDEX):最常见的索引类型,没有任何约束。
- 全文索引(FULLTEXT):用于搜索文本内容。
4. 按字段个数分类
- 单列索引:索引仅包含一个字段。
- 联合索引(复合索引/组合索引):索引包含多个字段,查询时遵循“最左前缀”原则。
“最左前缀”原则: A->B,你要先追踪A,才能追踪到B
常见的索引数据结构
1. 二叉树
- 特点:每个节点最多有两个子节,大在右,小在左。数据随机性情况下树杈越明显。
- 缺点:容易退化为链表,导致性能下降。
时间复杂度正常为O(logn)
但是如果结点按照顺序进入,树的高度则会很高(就是一个链表结构), 此时元素的查找效率就等于链表查询O(n),数据检索效率将极为低下。
2. 红黑树
红黑树说白了就是平衡二叉树,动态变化防止出现链表结构。所以查找、插入和删除操作时间复杂度一直是O(logn)
- 特点:一种自平衡二叉搜索树,插入和删除时性能稳定。
- 缺点:树的高度较高时,磁盘 I/O 次数增加,性能不佳。
数据库索引中,二叉树及其变种的使用有限,更多的是使用**多叉树(如 B 树和 B+ 树)**来组织数据。
3. B树
B树的出现可以解决树高度的问题。之所以是B树,而不是"xxx二叉树",就是它不再限制一个父节点中只能有两个子节点,而是允许 M 个子节点(M > 2)。
同时,B树的一个节点可以存储多个元素
-
特点:多路平衡查找树,每个节点可以包含多个子节点,适合磁盘存储。
-
缺点:叶子节点之间不相连,范围查询效率稍逊。
绿色模块为具体数据,红色类似于指针。
4. B+树
B+tree 是在B树基础上的一种优化,其更适合做存储索引结构。在 B+tree 中,非叶子节点上仅存储键值,不存储数据;而所有数据记录均存储在叶子节点上,并且数据是按照顺序排列的。此外在 B+tree 中各个数据页之间是通过双向链表连接的。
- 特点:
- B树的改进版本。
- 所有数据存储在叶子节点,内节点仅存储索引。
- 叶子节点通过链表相连,适合范围查询和磁盘存储。
- 优势:磁盘 I/O 次数少,查询性能更高。
注意:
树的高度对性能有直接影响——树的高度越低,查找效率越高。因此,数据库系统通常会设计索引树的高度为3到4层。
小结
索引的引入能显著提升数据查询效率,但也需要权衡利弊:
- 优点:加速查询、提升性能。
- 缺点:增加存储开销,插入、更新、删除操作的维护成本较高。
在实际使用中,合理选择索引类型和数据结构是优化数据库性能的关键。
思考
1. 红黑树的底层原理?
2. B+树的底层原理
3. 为什么 MySQL 选择 B+树作为默认索引的数据结构?
原文地址:https://blog.csdn.net/m0_70871140/article/details/144359927
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!