mysql索引
2025-5-18
| 2025-5-18
Words 813Read Time 3 min
type
status
date
slug
summary
tags
category
icon
password
😀
这里写文章的前言: 一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。

索引概述

索引是帮助mysql高效获取数据的数据结构(有序)。
1.他是为了高效获取数据而发明的
2.他是一种有序的数据结构
索引本质上是一种有序的数据结构,因为有序,有序不一定是从大到小,或者从小到大排序,而是有规律,按照规律查找数据,就会比无序查找数据快。
以下面二叉搜索树为例,数据没有索引的情况,要查找数据需要扫描全表。把数据建立了有规律的二叉树,就不需要扫描全表,就可以查到数据。
notion image
索引优缺点
优点:数据是存储在硬盘上的,而查询数据是需要消耗IO的,而IO是比较耗时的,添加索引可以提高检索速度,降低cpu消耗。
缺点:相对于没有索引,维护数据的有序性需要额外占用磁盘空间,此外,当进行数据的插入,更新,删除的时候,不仅要更新数据库,也要同时更新索引建立的数据结构,会增加耗时。
但总体而言,系统中还是读取数据的情况还是比插入数据的情况多,用户体验也肯定大于磁盘空间。
notion image

索引结构

现在主流的就是B+tree结构。

上面介绍了二叉树的数据结构,表面上看好像也没问题,但如果数据是顺序插入的情况,二叉树的结构将变成一个链表,查询数据的效率和没有索引是一样的,而且建立索引还占用空间。而且当数据量比较大的时候,二叉树之有两个节点,那么建立的层级将会很深,查询数据的效率不一定很高。
notion image

红黑树

为了解决顺序数据变为链表的问题,可以将二叉树优化为红黑树,红黑树是一种自平衡二叉树,它可以保证最坏情况下查询的效率。
但是他仍然是二叉树,数据量大的情况下仍然存在层级过深的情况。

B-Tree

为了解决二叉树带来的层级问题,我们可以把节点变多,每一层存储的数据变多,
下图是一个M=4 阶的B树:如果超过,则中间元素自动向上分裂。
notion image

B+Tree

相对于B树,B+tree有两个特点:
1.所有的叶子节点存放了所有的数据
2.叶子节点形成了一个单向链表
notion image
mysql的B+Tree在原来的基础上加上了双向链表
notion image
 
1比特与2比特字符MCP学习
Loading...